我有一個不一致的問題,在運行R腳本時我無法解釋。我無法生成一個可重複的例子,因爲有一整套由入口腳本調用的文件/函數。Rscript和R CMD BATCH的不同結果
在R v3.1.2中使用Rscript或RStudio我得到我期待的結果,但是當從bash調用R CMD BATCH時,我的腳本不會產生相同的輸出。從bash中,R似乎正確讀取命令行參數並從腳本報告它們,但是在我的代碼中,只有Rscript和RStudio source
方法似乎在我的代碼中正確使用了參數。
的2命令行調用如下:
Rscript ./script/forecast_category_script.R "category='razors'" "cores=4L"
R CMD BATCH --no-save "--args category='razors' cores=4L" ./script/forecast_category_script.R ~/data/output/out.out
有,爲什麼這些矛盾可能發生的任何明顯的原因是什麼?我更喜歡使用R CMD BATCH,因爲它將輸出重定向到一個文件,並且當我通過調度程序將我的代碼作爲批處理作業遷移到大學羣集時,我希望能夠遵循已完成的操作。
UPDATE:更改此行可以解決它,但爲什麼?
以前我曾在那裏以下行,基本上所以當我測試,如果它是在我的RStudio環境已經載入我不守重裝了巨大的數據集:
if(!exists("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
變量沒有被穿過適當入功能和它被加載不同的類別(啤酒而不是剃刀),它是一個巨大的文件,而不是適合於測試。
這仍然不能解釋爲什麼Rscript
和R CMD BATCH
表現不同。
如果在r cmd批中添加'--no-restore' – rawr 2014-12-02 18:46:43
即將嘗試它,並且可能是有史以來最棘手的問題之一。我的藉口是:在Windows上切換20年到第一臺Mac。 – 2014-12-02 23:45:43