我正在使用
sapply(list.files('scritps/', full.names=TRUE),source)
在“scripts /”文件夹中一次运行80个脚本,我不确切知道这是如何工作的。存在跨脚本同名的“中间”对象(它们是跨80个不同生物群体的迭代划痕)。每个脚本只使用自己的对象吗?是否存在脚本将尚未从内存中删除的其他“上一个”脚本的对象带入内存的风险,或者这个过程是否与逐个手动顺序运行完全相同? 非常感谢提前。
答案 0 :(得分:0)
您可以声明一个函数的全局变量。正如它的名字所说,它们是全球性的,可以重新评估。如果将一个var声明为一个函数,它将是局部变量,只有在这个具体函数中才会生效,它不会存在于它自己的函数之外。 例如:
Var globalVar = 'i am global';
Function foo(){
Var localVar = 'i don't exist out of foo function';
}
如果您在第一个脚本上声明了globalVar,并且在最新的脚本上调用它,它将会回答。如果你在某个脚本上声明了localVar并将其调用到另一个脚本中,或者在函数或其他函数中调用它,则会出现错误(未声明/无法找到var localVar)。
修改强>
也许,如果脚本之间没有依赖关系(你不需要一个完成继续使用另一个脚本),那么无论是在并行运行它们还是在运行它们时都是如此。行为将是相同的。
你只需要关注全局变量,本地变量不能推断到另一个脚本/函数。
答案 1 :(得分:0)
快速回答是:每个脚本独立运行。假设您运行for
循环遍历所有脚本文件而不是使用sapply
- 结果应该相同。
为了证明我的想法,我刚做了一个实验:
# This is foo.R
x <- mtcars
write.csv(x, "foo.csv")
# This is bar.R
x <- iris
write.csv(x, "bar.csv")
# Run them at once
sapply(list.files(), source)
虽然默认为&#34; local&#34; source
中的参数为FALSE,结果是我的工作目录中有两个不同的csv文件,一个名为&#34; foo.csv&#34;使用mtcars数据框,另一个名为&#34; bar.csv&#34;用虹膜数据框。