簡體   English   中英

R命令行將文件名傳遞給參數中的腳本(Windows)

[英]R command line passing a filename to script in arguments (Windows)

我很難將文件名傳遞給我的R腳本。 該文件是一個csv文件,其中包含多次運行腳本的批處理參數。 我試圖在此處包含它,以便用戶不需要編輯R腳本以指定該文件的位置。

我的Windows命令行語法是:

R CMD BATCH --slave "--args fn=batch.csv" myscript.r output.txt

我在R腳本中檢索到的最接近的是:

eval(parse(file=commandArgs()[8])))
batch_args = read.table(fn, sep=",")

我已經嘗試過commandArgs(trailingOnly=TRUE)parse(text=commandArgs()[8])等,沒有運氣。 我見過的大多數文檔都不適用於傳遞文件名。 誰能想到解決方案?

正如我在評論中所說,我會使用Rscript而不是R CMD BATCH

Rscript myscript.R batch.csv

其中myscript.R包含:

args <- commandArgs(TRUE)
batch_args <- read.table(args[1], sep=",")
# loop over multiple runs

除了使用Rscript(如Josh所說),你還應該使用CRAN包getoptoptparse,因為它們是為了這個目的而編寫的。

“沒有運氣”是什么意思? 文件名在那里,在commandArgs()函數中,你只需要弄清楚如何把它拿出來。 代碼和錯誤消息很方便。

如果唯一的額外參數是文件名,那么這不是問題,你知道它的位置。 當你開始傳遞更復雜的參數時,會讓你感到困惑的是什么。

通過傳遞'fn = foo.csv'也會使事情復雜化。 只需傳遞文件名並將其分配給腳本中的fn即可。 如果你真的想使用eval,你可能需要引用你的文件名,因此myscript.r是:

ca = commandArgs(trailingOnly=TRUE)
eval(parse(text=ca))
print(read.csv(fn))

然后運行:

R  --slave "--args fn='batch.csv'" < myscript.r
     A B C
   1 1 2 3
   2 6 8 3

batch.csv是一個簡單的csv文件。

您可以在腳本中對“ca”進行循環並對所有內容進行評估。 但這有點危險,因為你很容易打破基本功能。

就個人而言,我會遍歷ca,為一組已知名稱尋找名稱=值對,然后設置它們。 基本上實現了getopt,但有人可能已經這樣做了......

嘗試

fn="batch.csv"; R CMD BATCH --slave "--args $fn" myscript.r output.txt

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM