쉘 스크립트를 통해 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

문제는 쉘이 3행의 구문을 이해하려고 하지 않는 인터프리터를 ${HOME}/test.R사용하여 실행하려고 한다는 것입니다. 실행 하려는 인터프리터를 명시적으로 사용하십시오 .bashRtest.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으로 바꿉니다.

관련 정보