Rscript和R CMD批处理的不同结果

Rscript和R CMD批处理的不同结果,r,command-line,parameters,R,Command Line,Parameters,我有一个不一致的问题,在运行R脚本时无法解释。我无法生成一个可复制的示例,因为entry脚本调用了一整套文件/函数 在Rv3.1.2中使用Rscript或RStudio,我获得了预期的结果,但是当从bash调用R CMD BATCH时,我的脚本不会产生相同的输出。在bash中,R似乎正确地读取了命令行参数并从脚本中报告它们,但在我的代码中,只有Rscript和RStudiosource方法似乎正确地使用了代码中的参数 这两个命令行调用如下所示: Rscript./script/forecast\

我有一个不一致的问题,在运行R脚本时无法解释。我无法生成一个可复制的示例,因为entry脚本调用了一整套文件/函数

在Rv3.1.2中使用Rscript或RStudio,我获得了预期的结果,但是当从bash调用R CMD BATCH时,我的脚本不会产生相同的输出。在bash中,R似乎正确地读取了命令行参数并从脚本中报告它们,但在我的代码中,只有Rscript和RStudio
source
方法似乎正确地使用了代码中的参数

这两个命令行调用如下所示:

Rscript./script/forecast\u category\u script.R“category='razors'”cores=4L“

R CMD BATCH--no save”--args category='razors'cores=4L./script/forecast\u category\u script.R~/data/output/out.out

是否有任何明显的原因可以解释为什么会出现这些不一致?我更喜欢使用R CMD BATCH,因为它将输出重定向到一个文件,当我通过调度器将代码作为批处理作业迁移到大学集群时,我希望能够遵循它所做的操作

更新:更改此行可以解决问题,但原因是什么?

之前,我有以下几行代码,基本上,当我进行测试时,如果庞大的数据集已经加载到我的RStudio环境中,我不会一直重新加载它:

如果(!存在(“spi”))spi=f_load.spi(category=category)

将其替换为:

spi=f_load.spi(category=category)

基本功能
f_load_spi
保持不变,但是:

f_load.spi = function(spi = NULL, category = "razors" , n=NULL) {

    # check if the data is pre-loaded
    if (is.null(spi)) {
        fil = paste0(pth.data.storage, "categories/", category, "/", category, ".sp_ss.interp.rds")
        print(fil)
        spi = readRDS(fil)
    }
    # subset to a specific set of items
    if (!is.null(n)) {
        fc.items = unique(spi$fc.item)
        rnd = sample(1:length(fc.items), n)
        spi = spi[fc.item %in% fc.items[rnd]]
    }
    spi
}
出于某种原因,
category
变量没有正确地传递到函数中,它正在加载一个不同的类别(beer而不是razors),这是一个庞大的文件,不适合测试


这仍然不能解释为什么
Rscript
R CMD BATCH
的行为不同。

其中一个可能正在加载以前保存的工作区并使用全局变量。您是否检查过您所在的目录或是否存在.rhistore文件是否重要?确保没有任何隐藏变量的一种方法是在每个脚本的开头清除worspace。例如,将rm(list=ls())作为Rscript的第一行


此外,还可以使用sink()将输出通过管道传输到带有Rscript的文件

如果您将
--no restore
添加到r cmd batch中,并准备尝试它,可能是有史以来最难回答的问题之一,该怎么办。我的借口是:在Windows上使用20年,换成第一台Mac电脑。