如何使用 R 中的参数调用 OS 命令(shell 文件)
How to invoke the OS command (shell file) with argument in R
我喜欢在 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: "
Rscript --vanilla RunCalculation.R
[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 代码(并行 运行ning)与接收到的参数。
谢谢,
你可以使用
system2()
或
system()
结合 paste()
从 R 执行 shell 命令。在下面的示例中,shell 命令 echo
是从 R 使用字符串参数调用的。
arg <- "I am an R argument."
system2("echo", arg)
I am an R argument.
或
system(paste("echo", arg))
I am an R argument.
我喜欢在 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: "
Rscript --vanilla RunCalculation.R
[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 代码(并行 运行ning)与接收到的参数。
谢谢,
你可以使用
system2()
或system()
结合paste()
从 R 执行 shell 命令。在下面的示例中,shell 命令 echo
是从 R 使用字符串参数调用的。
arg <- "I am an R argument."
system2("echo", arg)
I am an R argument.
或
system(paste("echo", arg))
I am an R argument.