
В настоящее время я пытаюсь запустить скрипт R через скрипт оболочки.
Вот скрипт R:
test = rnorm(1:100, 1000)
write.csv(test, 'test.csv')
А вот скрипт bash, который вызывает R:
#!/bin/bash -l
#SBATCH --partition=compute
#SBATCH --job-name=test
#SBATCH --mail-type=ALL
#SBATCH [email protected]
#SBATCH --time=00:10:00
#SBATCH --nodes=1
#SBATCH --tasks-per-node=12
#SBATCH --account=myaccount
module purge
module load R
${HOME}/test.R
Я думаю, что я все сделал правильно, но на выходе появляется следующая ошибка:
/mydirectory/test.R: line 3: syntax error near unexpected token `('
/mydirectory/test.R: line 3: `test = rnorm(1:100, 1000)'
Почему у меня возникла эта ошибка?
решение1
Проблема в том, что оболочка пытается запустить ваш ${HOME}/test.R
интерпретатор, bash
синтаксис которого она не пытается понять из строки номер 3. R
Явно укажите интерпретатор, из которого вы хотите test.R
запустить ваш код.
Установите интерпретатор для вашего Rscript
в test.R
как
#!/usr/bin/env Rscript
module purge
module load R
test = rnorm(1:100, 1000)
write.csv(test, 'test.csv')
Таким образом, с установленным интерпретатором вы теперь можете запустить его из скрипта оболочки как
Rscript ${HOME}/test.R
Помните, вход в R
оболочку и запуск команд в ней, а также попытка их использования в скрипте оболочки — это не одно и то же, R
оболочка отличается от оболочки bash
. Вам нужно использовать способ запуска команд без входа в R
командную строку напрямую и использовать тот же подход в скрипте оболочки.
решение2
Я столкнулся с той же проблемой при запуске скрипта в контейнере Ubuntu, после замены \r\n на \n все заработало. Откройте скрипт с помощью текстового редактора и замените все \r\n на \n