使命令行以逗号分隔或解析空格

use*_*693 7 r commandargument

我正在尝试使用命令行参数从命令行运行R. 这包括传入一些文件路径作为在脚本中使用的参数.它大部分时间都有效,但有时路径中有空格而R不理解.

我正在运行以下形式:

R CMD BATCH --slave "--args inputfile='C:/Work/FolderWith SpaceInName/myinputfile.csv' outputfile='C:/Work/myoutputfile.csv'" RScript.r ROut.txt
Run Code Online (Sandbox Code Playgroud)

R抛出一个文件说

Fatal error: cannot open file 'C:\Work\FolderWith': No such file or directory
Run Code Online (Sandbox Code Playgroud)

所以我的单引号显然不足以告诉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)
Run Code Online (Sandbox Code Playgroud)

如果它是相关的我正在使用Windows,但它似乎不是一个cmd提示问题.

Pau*_*tra 3

使用eval(parse())可能不是解析命令行参数的最佳和最有效的方法。我建议使用像 之类的包optparse来为您进行解析。解析命令行参数已经解决,无需重新实现。我可以想象这可以解决您的问题。尽管如此,路径名中的空格一开始并不是一个好主意。

或者,您可以采用非常简单的方法并传递如下参数:

R CMD BATCH --slave arg1 arg2
Run Code Online (Sandbox Code Playgroud)

您可以在哪里检索它们,例如:

ca = commandArgs(TRUE)
arg1 = ca[2]
arg2 = ca[3]
Run Code Online (Sandbox Code Playgroud)

这避免了eval(parse我认为导致问题的原因。最后,你可以尝试像这样逃离这个空间:

R CMD BATCH --slave "C:/spam\ bla"
Run Code Online (Sandbox Code Playgroud)

你也可以尝试Rscript一下,R CMD BATCH好像不太受青睐Rscript