2013-07-02 46 views
3

我想將R腳本轉換成客戶端可以在批處理模式下運行的東西。我的代碼使用泛型函數和一個片段是在開始部分是這樣:Rscript不能識別setGeneric函數

setGeneric("testInput", function(inputData, params = list()) 
    standardGeneric("testInput")) 

我一直在使用[R CMD批處理,它工作正常。但是我找不到一個簡單的方法讓我的腳本在控制檯上打印輸出,所以基於此(並建議Rscript.exe是運行R批處理文件的「正確」方式),我決定切換到Rscript。運行與RSCRIPT非常相同.R文件但是當我得到如下:

Error: could not find function "setGeneric" 
Execution halted 

我知道有可能是這背後一個微不足道的原因,但我無法弄清楚。有人可以指出我的錯誤在哪裏嗎?
有什麼建議嗎?

+3

加上'要求(方法)'在腳本的開頭 – dickoa

+0

工作就像一個魅力。謝謝! –

+0

@dickoa,+1。爲了避免這個問題正式地被解決,你會不會介意將你的評論轉換爲答案? – gung

回答

3

setGenericmethods包時在交互會話開始ř但不能在非交互式會話使用Rscriptlittler它通常裝載的一部分。

因此,您需要在腳本中調用setGeneric之前添加require(methods)

例如,該代碼將無法正常工作

Rscript -e "setGeneric('mean', function(x) standardGeneric('mean'))" 
Error: could not find function "setGeneric" 
Execution halted 

但是這一次將工作

Rscript -e "require(methods);setGeneric('mean', function(x) standardGeneric('mean'))" 
Loading required package: methods 
[1] "mean"