将函数输入到source()

时间:2017-04-28 13:17:06

标签: r function lapply

我想在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

1 个答案:

答案 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"