如何使用 R 中的参数调用 OS 命令(shell 文件)

How to invoke the OS command (shell file) with argument in R

我喜欢在 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: "  

Rscript --vanilla RunCalculation.R 

[RunCalculation.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 代码的 'system' 函数中做错了什么。 如何调用 OS 命令并一起发送参数?

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

谢谢,

你可以使用

  • 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.