
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.R
con un bash
intérprete para el cual no intenta comprender la sintaxis de la línea número 3. Utilice R
explícitamente el intérprete desde el que desea test.R
ejecutar.
Configure el intérprete para su Rscript
entrada test.R
como
#!/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 R
el shell y ejecutar los comandos en él y probarlo en el script del shell no son lo mismo, R
el shell es diferente del bash
shell. Debe utilizar la forma de ejecutar los comandos sin iniciar sesión R
directamente 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