【发布时间】:2023-04-04 15:18:01
【问题描述】:
我喜欢在 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
[运行计算.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 代码的“系统”函数中做错了。 如何同时调用 OS 命令和发送参数?
我之所以测试这个是因为我想在 MyRcode.R 中获取 myVector,并提交 slurm 作业并将 myVector 元素作为参数发送。 slurm 作业将使用接收到的参数在超级计算机集群(并行运行)中运行另一个 R 代码。
谢谢,
【问题讨论】:
-
您引用了
"argument"作为字符串的一部分,因此它不是指变量argument。paste命令一起:system(paste("./Shell_RunCalculations.sh", argument)) -
哦,谢谢你的帮助!我测试过,它有效!