r语言 - 使用由高级函数创建的对象的函数



我有两个函数一个在另一个里面

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的解决方案,如果你可以修改你的函数接受输入的方式。他的回答是推荐的编程方式。

最新更新