2010-07-17 10 views
12

Si tengo un script R:¿Cómo puedo suprimir la salida de los números de línea usando R CMD BATCH?

print("hi") 
commandArgs() 

Y corro usando:

r CMD BATCH --slave --no-timing test.r output.txt 

La salida contendrá:

[1] "hi" 
[1] "/Library/Frameworks/R.framework/Resources/bin/exec/x86_64/R" 
[2] "-f"               
[3] "test.r"              
[4] "--restore"             
[5] "--save"              
[6] "--no-readline"            
[7] "--slave"              

¿Cómo puedo suprimir los números de línea [1 ] .. [7] en el resultado por lo que solo aparece el resultado de la secuencia de comandos?

+4

'cat ("algo \ n")' – aL3xa

+0

@ aL3xa Si hubiera escrito que hacia arriba como respuesta, probablemente lo habría votado. Pero como comentario lo pasé por alto, pensando "¿qué tiene que ver 'gato' con algo?" :) –

Respuesta

5

Sí, es correcto MBq - utilizar Rscript, o, si flota su barco, littler:

$ cat /tmp/tommy.r 
#!/usr/bin/r 

cat("hello world\n") 
print(argv[]) 
$ /tmp/tommy.r a b c 
hello world 
[1] "a" "b" "c" 
$ 

Es posible que desee mirar a CRAN paquetes getopt y optparse para el argumento-análisis como desee hacer en otros lenguajes de script/

+0

Esta respuesta es engañosa. No creo que el problema sea con * cómo * se invoca el script R. La solución es usar 'cat' en lugar de' print'. –

2

Usa commandArgs(TRUE) y ejecuta tu secuencia de comandos con Rscript.

EDIT: Ok, he leído mal tu pregunta. David tiene razón.

+1

Si se usa commandArgs (TRUE) es un buen truco al hacer el análisis de comandos, no aborda la pregunta, es decir, cómo suprimir el '[1]', '[2]', y así sucesivamente. –

+0

@DavidJames Cierto, la pregunta fue engañosa, por lo tanto esta es la respuesta. – mbq

13

uso cat en lugar de print si desea suprimir los números de línea ([1], [2], ...) en la salida.

Creo que también querrá pasar los argumentos de la línea de comandos. Creo que la forma más sencilla de hacerlo es crear un archivo con el RSCRIPT shebang:

Por ejemplo, crear un archivo llamado args.r:

#!/usr/bin/env Rscript 
args <- commandArgs(TRUE) 
cat(args, sep = "\n") 

hacerlo ejecutable con chmod +x args.r y luego se puede ejecutar con ./args.r ARG1 ARG2

FWIW, pasando parámetros de línea de comandos con la sintaxis R CMD BATCH ... es un dolor. Aquí está cómo lo hace: R CMD BATCH "--args ARG1 ARG2" args.r Tenga en cuenta las comillas. Más discusión here

ACTUALIZACIÓN: cambió la línea shebang anterior #!/usr/bin/Rscript-#!/usr/bin/env Rscript en respuesta al comentario de @ MBq (gracias!)

+0

Este shebang no es demasiado afortunado, ya que Rscript salta a través del sistema de archivos en varias distribuciones (y versiones de 32-64 bits). Sin embargo, 'env' está aquí para salvar el día, y' #!/Usr/bin/env Rscript' siempre debería funcionar. – mbq

+0

@mbq aunque mi shebang original no fue afortunado, tu comentario fue, así que gracias –

Cuestiones relacionadas