Как вызвать вызывает команду ОС (файл оболочки) с аргументом в R - PullRequest
0 голосов
/ 21 октября 2018

Мне нравится вызывать команду OS (запуск файла оболочки в linux) в коде R и отправлять вместе аргумент, полученный в коде R.Например, MyRcode.R выполнит некоторые вычисления и получит векторный вывод.Затем MyRcode.R будет использовать цикл for для запуска файла оболочки и отправки каждого элемента в векторе.Вот простой пример кода.

[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.

Сначала,в файле оболочки я ожидал напечатать

argument: 3
argument: 5
argument: 7

Однако он распечатал

argument: argument
argument: argument
argument: argument

Я думаю, что я сделал что-то не так в функции 'system' в коде R. Как я могу вызвать команду ОС и отправить аргумент вместе?

Причина, по которой я проверяю это, заключается в том, что я хочу получить myVector в MyRcode.R, отправить задание на слермы и отправить myVectorэлементы в качестве аргументов.Задание slurm запускает другой R-код в кластерах суперкомпьютера (параллельный запуск) с полученными аргументами.

Спасибо,

1 Ответ

0 голосов
/ 29 октября 2018

Вы можете использовать

  • system2() или
  • system() в сочетании с paste()

для выполнения команды оболочки из RВ следующем примере команда оболочки 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.
...