我正在尝试使用命令行参数从命令行运行 R。这包括传入一些文件路径作为脚本内部使用的参数。大多数情况下这一切都有效,但有时路径中有空格并且 R 不理解。
我正在运行以下形式的东西:
R CMD BATCH --slave "--args inputfile='C:/Work/FolderWith SpaceInName/myinputfile.csv' outputfile='C:/Work/myoutputfile.csv'" RScript.r ROut.txt
然后 R 抛出一个文件说
Fatal error: cannot open file 'C:\Work\FolderWith': No such file or directory
所以显然我的单引号不足以告诉 R 将引号内的所有内容作为参数值。我想这意味着我应该找到一种方法来分隔我的
--args
使用逗号,但我找不到办法做到这一点。我确定这很简单,但我在文档中没有找到任何内容。
当前的脚本非常基础:
ca = commandArgs(trailingOnly=TRUE)
eval(parse(text=ca))
tempdata = read.csv(inputFile)
tempdata$total = apply(tempdata[,4:18], 1, sum)
write.csv(tempdata, outputFile, row.names = FALSE)
如果相关,我正在为此使用 Windows,但这似乎不是 cmd 提示问题。
请您参考如下方法:
使用 eval(parse())
可能不是解析命令行参数的最佳和最有效的方法。我建议使用像 optparse
这样的包为你做解析。解析命令行args已经解决了,不需要重新实现。我可以想象这可以解决您的问题。虽然,路径名中的空格一开始是个坏主意。
或者,您可以采用一种非常简单的方法并像这样传递参数:
R CMD BATCH --slave arg1 arg2
您可以在哪里检索它们,例如:
ca = commandArgs(TRUE)
arg1 = ca[2]
arg2 = ca[3]
这避免了
eval(parse
我认为这是导致问题的原因。最后,您可以尝试像这样逃离空间:
R CMD BATCH --slave "C:/spam\ bla"
你也可以给
Rscript
试一试,
R CMD BATCH
似乎不如
Rscript
受欢迎.