我有两个函数一个在另一个里面
fun.a <- function (y,smth) {
z <- y*3
sapply(smth,FUN = fun.b)
}
fun.b <- function(x) {
return(x+z)
}
如果我运行:
fun.a(2, c(1, 2, 3))
我得到一个错误消息,因为z
不存在于"较低级别"函数fun.b
中。但是在fun.a
中使用sapply
时,我不能传递值z
!
也许存在一个函数,允许在函数内部创建一个也存在于外部的对象?如何解决这个问题?
编辑:我不想在fun.a
内复制粘贴fun.b
,我不想用for-loop
代替sapply
。在这种情况下,还存在解决方案吗?
这样就可以了,您可以使用...
参数将任何附加值传递给fun.b
:
fun.a <- function (y,smth) {
z <- y*3
sapply(smth,FUN = fun.b, z = z)
}
fun.b <- function(x, z) {
return(x+z)
}
fun.a(2, c(1, 2, 3))
如果您不允许修改fun.b
,那么,在fun.a
的主体内,创建fun.b
的副本并附加一个环境:
fun.a <- function (y,smth) {
e <- new.env()
assign("z", y*3, envir = e)
fun.b.copy <- fun.b
environment(fun.b.copy) <- e
sapply(smth,FUN = fun.b.copy)
}
我仍然喜欢@Paul的解决方案,如果你可以修改你的函数接受输入的方式。他的回答是推荐的编程方式。