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

时间:2018-10-20 23:57:47

标签: r system invoke

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

[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代码。

谢谢

1 个答案:

答案 0 :(得分:0)

您可以使用

  • system2()
  • system()paste()

从R执行shell命令。在下面的示例中,从R使用字符串参数调用shell命令echo

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

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