我在另一个内部有两个函数
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
}。在这种情况下,解决方案是否仍然存在?
答案 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的解决方案。他的答案是推荐的编程方式。