使用由更高级别函数创建的对象的函数

时间:2013-03-31 11:20:53

标签: r function object

我在另一个内部有两个函数

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))

我收到错误消息,因为“{level}”函数z中不存在fun.b。但在z中使用sapply时,我无法传递值fun.a

也许它存在一个函数,允许在函数内部创建一个也存在于外部的对象?如何解决这个问题?

修改:我不想在fun.b内复制粘贴fun.a,我不想将sapply替换为for-loop }。在这种情况下,解决方案是否仍然存在?

2 个答案:

答案 0 :(得分:2)

这很有效,您使用...参数将任何其他值传递给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))

答案 1 :(得分:0)

如果您不允许修改我从评论中收集的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的解决方案。他的答案是推荐的编程方式。