【问题标题】:Doubts on running multiple scripts at once怀疑一次运行多个脚本
【发布时间】:2018-03-24 15:29:50
【问题描述】:

我正在使用

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

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

【问题讨论】:

  • 你读过local参数source吗?
  • 我明白了...我应该使用 local = T 为每个脚本使用它自己的特定环境,不是吗?
  • @MartinSchmelzer 我怀疑这与 local 参数有什么关系...它确定解析表达式的评估环境(全局或本地),但 OP 正在运行 source相同的环境。
  • 是的,他的问题是对一个脚本的评估是否会影响另一个脚本。所以使用local 来确保每个脚本都来源于它自己的环境.......
  • @MartinSchmelzer 脚本没有自己的环境,是吗?要使“每个脚本都源自其自己的环境”,必须创建与this thread 所建议的脚本编号一样多的环境。我看不出它如何更有效,或者更重要的是,它如何回答“一个脚本的评估是否会影响另一个脚本”本身的问题。

标签: r


【解决方案1】:

快速回答是:每个脚本独立运行。假设您运行 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)

虽然source 中“local”参数的默认值为 FALSE,但事实证明我的工作目录中有两个不同的 csv 文件,一个名为“foo.csv”,带有 mtcars 数据框,另一个名为“ bar.csv" 与虹膜数据框。

【讨论】:

  • 我明白了。因此独立于 F 或 T 参数,脚本独立运行。谢谢!
  • 其实我用local=T的时候,每个脚本最后都有问题,失败了……bur运行o时=F。
  • “local”参数是not,表示每个脚本是否应该独立执行。这实际上是关于 R 语言中的全局和本地环境范围,这与您的问题无关。至于local = T 失败的原因,我无法直接给出答案,因为我不知道你的代码是如何设计的。如果您对环境感兴趣,请查看this chapter
【解决方案2】:

您可以在函数中声明一些全局变量。顾名思义,它们是全球性的,可以重新评估。如果将 var 声明为函数,它将是局部变量,并且只会在这个具体函数内部生效,它不会存在于自己的函数之外。 示例:

Var globalVar = 'i am global';
Function foo(){
    Var localVar = 'i don't exist out of foo function';
}

如果您在第一个脚本中声明 globalVar,并在最新的脚本中调用它,它会回答。如果您在某个脚本上声明了 localVar,然后将其调用到另一个函数或函数外或另一个函数中,您将收到错误消息(var localVar 未声明/无法找到)。

编辑:

也许,如果脚本之间没有依赖关系(您不需要一个完成来继续另一个),那么并行运行它们或连续运行它们都没有关系。行为将是相同的。

你只需要注意全局变量,本地变量不能推断到另一个脚本/函数。

【讨论】:

  • 请问,这是用 R 写的吗?
  • 不,这是一个 javascript 示例。我可以用 java、c、c++、c#、python、kotlin、php、vb 编写示例......并且它会采用相同的行为,本地和全局变量在所有编程语言中都很常见。将全局变量声明为仅在一个函数中使用是没有意义的
  • 它的 R。脚本之间没有依赖关系......所以我想我可以假设它们独立运行。就像另一个回应证实的那样。谢谢!
猜你喜欢
  • 2021-10-09
  • 2012-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-06
  • 1970-01-01
  • 2012-06-24
  • 2021-05-22
相关资源
最近更新 更多