如何在 R 中使用参数调用操作系统命令(外壳文件)



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

相关内容

最新更新