2014-12-02 67 views
1

我有一個不一致的問題,在運行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變量沒有被穿過適當入功能和它被加載不同的類別(啤酒而不是剃刀),它是一個巨大的文件,而不是適合於測試。

這仍然不能解釋爲什麼RscriptR CMD BATCH表現不同。

+1

如果在r cmd批中添加'--no-restore' – rawr 2014-12-02 18:46:43

+0

即將嘗試它,並且可能是有史以來最棘手的問題之一。我的藉口是:在Windows上切換20年到第一臺Mac。 – 2014-12-02 23:45:43

回答

1

可能是其中一個正在加載先前保存的工作區並使用全局變量。您是否檢查過您的目錄是否有問題,或者是否存在任何.Rhistory文件?確保您沒有任何隱藏變量的一種方法是在每個腳本的開始處清除崇拜空間。例如,rm(list = ls())作爲Rscript的第一行。

此外,您可以使用sink()將輸出傳輸到帶有Rscript的文件。

相關問題