首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在命令系统评估中使用sprintf函数的r- For循环

在命令系统评估中使用sprintf函数的r- For循环
EN

Stack Overflow用户
提问于 2014-10-19 21:16:34
回答 1查看 3.9K关注 0票数 0

我想使用批处理文件运行许多文件,该批处理文件将使用for循环从R执行。例如,假设我有2次要执行的运行:

代码语言:javascript
复制
runs <- c(102, 103)

系统命令的语法要求首先指定批处理文件,然后是运行的输入数据文件(102.txt103.txt),以及执行批处理文件后输出结果文件的名称(102.res103.res)。我试图使用for循环来运行它:

代码语言:javascript
复制
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控制台显示以下警告:

代码语言:javascript
复制
Error in command:system(cmd) : NA/NaN argument

考虑到这个错误是阻止R前进到下一次运行的原因,我尝试在for循环中使用options(warn = -1)

代码语言:javascript
复制
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)的输出正是我所希望的那样,我只是希望能够绕过这个错误,继续我的其余的运行。对如何做好这件事有什么想法吗?

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-19 21:41:55

这是你所拥有的

代码语言:javascript
复制
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)
}

哪种输出

代码语言:javascript
复制
[1] "C:/example1/test.bat 102.txt 102.res"
[1] "C:/example1/test.bat 102.txt 102.res"

尝试使用循环变量r代替数组运行,在cmd <-.线路

代码语言:javascript
复制
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)
}

输出是

代码语言:javascript
复制
[1] "C:/example1/test.bat 102.txt 102.res"
[1] "C:/example1/test.bat 103.txt 103.res"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26455510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档