Executando o script R via shell script. erro de sintaxe próximo token inesperado '('

1

Sou bastante novo no ambiente Linux e atualmente estou tentando executar um script R por meio de um script de shell.

Aqui o script R:

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

E aqui o script bash que chama o 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

Acho que fiz tudo corretamente, mas a saída retorna o seguinte erro:

/mydirectory/test.R: line 3: syntax error near unexpected token '('
/mydirectory/test.R: line 3: 'test = rnorm(1:100, 1000)'

Por que eu recebi esse erro?

    
por aaaaa 02.12.2017 / 11:47

1 resposta

5

O problema é que o shell está tentando executar seu ${HOME}/test.R com um interpretador bash para o qual ele não está tentando entender a sintaxe do número de linha 3. Use o interpretador R explicitamente do qual você deseja o test.R para ser executado.

Defina o intérprete para o seu Rscript em test.R as

#!/usr/bin/env Rscript

module purge
module load R 
test = rnorm(1:100, 1000)
write.csv(test, 'test.csv')

Desta forma, com o conjunto de intérpretes, agora você pode executá-lo a partir do script de shell como

Rscript ${HOME}/test.R

Lembre-se de fazer login no R shell e executar os comandos nele e testá-lo no script de shell não é o mesmo, R shell é diferente do bash shell. Você precisa usar o caminho para executar os comandos sem efetuar login no R diretamente da linha de comando e usar a mesma abordagem no script de shell.

    
por 02.12.2017 / 11:55