Rscript与来源:关键区别是什么?

时间:2011-10-16 01:58:06

标签: r

这可能是一个非常基本的问题,但尚未找到令人信服的答案。在R环境中执行R脚本时,我可以source(foo.R)system("Rscript foo.R")。两种方法之间是否存在任何差异,如果是这样,两种方法的比较如何?

3 个答案:

答案 0 :(得分:15)

它们的效果根本不同。

  • source("foo.R")告诉您的当前 R进程从"foo.R"获取其输入。

  • system("Rscript foo.R")使用操作系统命令启动单独的 R进程,在该进程中评估"foo.R"的内容。

Rscript调用根本不会直接影响当前的R会话,之外,它默认会在当前控制台上打印其他R会话的输出。 (您可以通过设置system())在show.output.on.console=FALSE来电中停用此功能。

答案 1 :(得分:3)

我认为source(foo.R)在当前环境中包含该文件(foo.R)的源代码。如果您在foo.R中定义变量,请说x <- 5,并在当前项目中预先定义x <- 6x变为5

system("Rscript foo.R")使用参数Rscript运行foo.R程序,因此您当前的环境根本不会受到影响。

答案 2 :(得分:2)

作为对@ Ramnath评论的回答:sys.source("foo")Rscript foo不同。例如,您可以使用sys.source执行以下操作:

e <- new.env()
sys.source("foo", e)  # foo creates a bunch of objects in environment e
z <- with(e, {
    # do stuff with e....
})
rm(e)

如果要创建多个中间对象,则可以执行此操作,然后执行操作并返回最终结果。您不希望保留中间对象,因此将它们放入自己的临时环境中是一种简单的方法,可以一次性删除它们。