【问题标题】:How to invoke the OS command (shell file) with argument in R如何在 R 中使用参数调用 OS 命令(shell 文件)
【发布时间】:2023-04-04 15:18:01
【问题描述】:

我喜欢在 R 代码中调用 OS 命令(在 linux 中运行 shell 文件)并将我在 R 代码中得到的参数一起发送。例如,MyRcode.R 会做一些计算并得到一个向量输出。然后,MyRcode.R 将使用 for 循环来运行一个 shell 文件并发送向量中的每个元素。这是一个简单的代码示例。

[MyRcode.R]

############################################
### Some calculation to get myVector  ######
                   .
                   .
############################################

print(myVector)  # [1]  3  5   7
for (argument in myVector) {
    system("./Shell_RunCalculations.sh argument")
}

[Shell_RunCalculations.sh]

#!/bin/bash

module load R/3.5.1-gcc5.2.0

echo "argument: " $1 

Rscript --vanilla RunCalculation.R $1

[运行计算.R]

### This is very complex calculation which should run in Supercomputer.

首先,在shell文件中,我希望打印出来

argument: 3
argument: 5
argument: 7

但是打印出来了

argument: argument
argument: argument
argument: argument

我认为我在 R 代码的“系统”函数中做错了。 如何同时调用 OS 命令和发送参数?

我之所以测试这个是因为我想在 MyRcode.R 中获取 myVector,并提交 slurm 作业并将 myVector 元素作为参数发送。 slurm 作业将使用接收到的参数在超级计算机集群(并行运行)中运行另一个 R 代码。

谢谢,

【问题讨论】:

  • 您引用了"argument" 作为字符串的一部分,因此它不是指变量argumentpaste 命令一起:system(paste("./Shell_RunCalculations.sh", argument))
  • 哦,谢谢你的帮助!我测试过,它有效!

标签: r system invoke


【解决方案1】:

你可以使用

  • system2()
  • system() 结合paste()

从 R 中执行 shell 命令。在以下示例中,shell 命令 echo 从 R 中调用,并带有一个字符串参数。

arg <- "I am an R argument."
system2("echo", arg)
I am an R argument.

system(paste("echo", arg))
I am an R argument.

【讨论】:

  • 感谢您的解释,弗洛里安。我不知道我可以使用“system2()”。谢谢!!
  • @Sanghoon 我很高兴这个答案对你有用。你可以接受。那么您的问题将不再在 stackoverflow 上显示为未回答的问题...
  • 哦,我应该接受答案以使我的问题不会显示为未回答的问题。我接受了你的回答。谢谢你告诉我。
猜你喜欢
  • 1970-01-01
  • 2020-08-17
  • 2017-07-14
  • 2020-02-14
  • 1970-01-01
  • 2017-01-08
  • 1970-01-01
  • 2010-12-15
  • 2017-07-13
相关资源
最近更新 更多