我想在lapply
的多个数据集上运行一个函数。我编写了一个函数,它通过source()
访问不同的R脚本,但是函数中创建的对象不会转移到“源代码”。类似的东西:
one = seq(1:10000)
two = seq(10001:20000)
three = seq(20001:30000)
ott = list(one, two, three)
test = function(x){
yt = diff(log(x), 10)
source("C:/blabla")
return("something calculated in source")
}
lapply(ott, test)
当source()
类似于
result=yt+1
相应的错误消息是:
在source()
中找不到对象yt
答案 0 :(得分:2)
函数创建自己的环境,并且在函数中创建的变量仅存在于此环境中。默认情况下,source
在全局环境中执行,因此无法找到在函数中创建的对象。
您可以通过将local参数设置为TRUE来告诉source
在函数创建的环境中运行。
test = function(x){
yt = diff(log(x), 10)
this <- source("./temp.R", local=TRUE)
return("something calculated in source")
}
然后lapply
返回
lapply(ott, test)
[[1]]
[1] "something calculated in source"
[[2]]
[1] "something calculated in source"
[[3]]
[1] "something calculated in source"