Ejecutar script R mediante script de shell. error de sintaxis cerca del token inesperado `('

Ejecutar script R mediante script de shell. error de sintaxis cerca del token inesperado `('

Actualmente estoy intentando ejecutar un script R a través de un script de shell.

Aquí el script R:

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

Y aquí el script bash que llama al 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

Creo que hice todo correctamente, pero el resultado devuelve el siguiente error:

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

¿Por qué recibí este error?

Respuesta1

El problema es que el shell está intentando ejecutarlo ${HOME}/test.Rcon un bashintérprete para el cual no intenta comprender la sintaxis de la línea número 3. Utilice Rexplícitamente el intérprete desde el que desea test.Rejecutar.

Configure el intérprete para su Rscriptentrada test.Rcomo

#!/usr/bin/env Rscript

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

De esta manera, con el intérprete configurado, ahora puede ejecutarlo desde el script de shell como

Rscript ${HOME}/test.R

Recuerde, iniciar sesión en Rel shell y ejecutar los comandos en él y probarlo en el script del shell no son lo mismo, Rel shell es diferente del bashshell. Debe utilizar la forma de ejecutar los comandos sin iniciar sesión Rdirectamente desde la línea de comandos y utilizar el mismo enfoque en el script de shell.

Respuesta2

Me enfrenté al mismo problema al ejecutar el script en el contenedor de Ubuntu, después de reemplazar \r\n con \n, funciona. Ábralo el script usando un editor de texto y reemplace todo el \r\n con \n

información relacionada