我喜欢在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代码。
谢谢
答案 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.