我想使用批处理文件运行一些文件,这些文件将使用for循环从R执行。举个例子,假设我有2个我想要执行的运行:
runs <- c(102, 103)
系统命令的语法要求首先指定批处理文件,然后是运行的输入数据文件(102.txt
和103.txt
)以及输出结果文件的名称。批处理文件已执行(102.res
和103.res
)。我试图使用for循环运行它:
for (r in runs) {
cmd <- sprintf('C:/example1/test.bat %d.txt %d.res', runs, runs)[1]
print(eval(cmd))
command: system(cmd)
}
[1] "C:/example1/test.bat 102.txt 102.res"
不幸的是,这只会执行第一次运行(102
)而不会进入下一次运行(103
)。 R控制台显示以下警告:
Error in command:system(cmd) : NA/NaN argument
认为此错误阻止了R进入下一次运行,我试图在for循环中使用options(warn = -1)
:
for (r in runs) {
options(warn = -1)
cmd <- sprintf('C:/example1/test.bat %d.ctl %d.res', runs, runs)[1]
print(eval(cmd))
command: system(cmd)
options(warn = 0)
}
不幸的是,这继续引发同样的错误。对于它的价值,我的批处理文件(102.res
)的输出正是我想要的,我只是希望能够绕过这个错误并继续我的其余运行。有关如何最好地做到这一点的任何想法?
提前致谢。
答案 0 :(得分:2)
这是你拥有的
runs <- c(102, 103)
for (r in runs) {
cmd <- sprintf('C:/example1/test.bat %d.txt %d.res', runs, runs)[1]
print(eval(cmd))
# command: system(cmd)
}
输出
[1] "C:/example1/test.bat 102.txt 102.res"
[1] "C:/example1/test.bat 102.txt 102.res"
尝试使用循环变量r而不是数组,在cmd&lt; -... line
中运行for (r in runs) {
cmd <- sprintf('C:/example1/test.bat %d.txt %d.res', r, r)[1] # <- change runs to r
print(eval(cmd))
# command: system(cmd)
}
输出
[1] "C:/example1/test.bat 102.txt 102.res"
[1] "C:/example1/test.bat 103.txt 103.res"