쉘 스크립트를 통해 R 스크립트를 실행합니다. 예기치 않은 표시 '(' 근처에 구문 오류가 있습니다.

쉘 스크립트를 통해 R 스크립트를 실행합니다. 예기치 않은 표시 '(' 근처에 구문 오류가 있습니다.

현재 쉘 스크립트를 통해 R 스크립트를 실행하려고 합니다.

R 스크립트는 다음과 같습니다.

test = rnorm(1:100, 1000)
write.csv(test, 'test.csv')

다음은 R을 호출하는 bash 스크립트입니다.

#!/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이는 shell 과 다릅니다 bash. 명령줄에서 직접 로그인할 필요가 없는 방식으로 명령을 실행해야 하며 R, 쉘 스크립트에서도 동일한 방법을 사용해야 합니다.

답변2

Ubuntu 컨테이너에서 스크립트를 실행하는 데 동일한 문제가 있었고 \r\n을 \n으로 바꾼 후에는 작동했습니다. 텍스트 편집기로 스크립트를 열고 모든 \r\n을 \n으로 바꿉니다.

관련 정보