我喜欢在 R 代码中调用操作系统命令(在 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 代码的"系统"函数中做错了什么。如何同时调用操作系统命令和发送参数?
我测试这个的原因是因为我想在MyRcode.R中获取myVector,并提交slurm作业并将myVector元素作为参数发送。slurm 作业将使用收到的参数在超级计算机集群(并行运行(中运行另一个 R 代码。
谢谢
你可以使用
system2()
或system()
与paste()
结合使用
以执行来自 R 的外壳命令。在下面的示例中,使用 string 参数从 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.