怀疑一次运行多个脚本

时间:2018-03-24 15:29:50

标签: r

我正在使用

sapply(list.files('scritps/', full.names=TRUE),source)

在“scripts /”文件夹中一次运行80个脚本,我不确切知道这是如何工作的。存在跨脚本同名的“中间”对象(它们是跨80个不同生物群体的迭代划痕)。每个脚本只使用自己的对象吗?是否存在脚本将尚未从内存中删除的其他“上一个”脚本的对象带入内存的风险,或者这个过程是否与逐个手动顺序运行完全相同? 非常感谢提前。

2 个答案:

答案 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;用虹膜数据框。