我正试图从批处理文件中运行R脚本,以便它对于其他用户而言可以变得干净整洁。当前,您将CSV文件拖放到批处理文件上,它将文件名传递到R脚本进行输入。
当文件路径/名称中有空格时,它在RStudio中可以正常工作,但是当我从批处理文件中调用它时会引起问题。当我这样做时,它将尝试在空格之前打开路径。
我尝试通过使用shortPathName(inputPath)
并通过用“ \”替换空格来在R中重新格式化文件路径,但这似乎不起作用。
此刻,脚本已启动
"%~dp0\R-3.6.0\bin\R.exe" CMD BATCH "--args %~1" "%~dp0\Script.R"
脚本包含
args <- commandArgs(TRUE)
inputPath <- args[1]
inputPath <- shortPathName(inputPath)
inputData <- read.csv(inputPath)
它可以在RStudio中正常运行,但是从批处理启动时崩溃,并在输出文件中生成此错误消息:
file(file,“ rt”)中的错误:无法打开连接
调用:read.csv-> read.table->文件
另外:警告消息:
在file(file,“ rt”)中:
无法打开文件“ 文件路径直至空格”:没有此类文件或目录
执行停止
答案 0 :(得分:0)
绝不是R专家,但我会尽力
%~dp0\R-3.6.0\bin\R.exe" CMD BATCH "--args %~s1" "%~dp0\Script.R"
%~s1
应该提供短文件名作为参数。
答案 1 :(得分:0)
在尝试了几种批处理文件的形式并进行了一些调试之后,我发现该批处理文件将文件的第一部分作为第一个参数传递到空格之前。
在发现不再建议在CMD BATCH模式下使用R后,请切换为使用Rscript模式运行,
"%~dp0\R-3.6.0\bin\Rscript.exe" --vanilla "%~dp0\Script.R" "%~1"
这允许将参数以“”传递给R,并因此以空格传递给R。 从v3.5.1开始,R接受带空格的文件路径。