2010-12-28 17 views
15

Tengo un script bash que crea un archivo csv y un archivo R que crea gráficos a partir de eso.argumentos de línea de comando en bash a Rscript

Al final de la escritura del golpe que llamo Rscript Graphs.R 10

La respuesta que obtengo es el siguiente:

Error in is.vector(X) : subscript out of bounds 
Calls: print ... <Anonymous> -> lapply -> FUN -> lapply -> is.vector 
Execution halted 

Las pocas primeras líneas de mi Graphs.R son:

#!/bin/Rscript 
args <- commandArgs(TRUE) 
CorrAns = args[1] 

No tengo idea de qué estoy haciendo mal? El consejo en la red me parece decir que esto debería funcionar. Es muy difícil hacer sentido de commandArgs

Respuesta

13

Con el siguiente en args.R

print(commandArgs(TRUE)[1]) 

y la siguiente en args.sh

Rscript args.R 10 

Obtengo la siguiente salida desde bash args.sh

[1] "10" 

y ningún error. Si es necesario, conviértalo a tipo numérico usando as.numeric(commandArgs(TRUE)[1]).

+0

Gracias. Descubrí que vuelve como una cadena. ¿Cómo puedo convertir eso en valor numérico? Estoy tratando de encontrar la respuesta a eso. – samar

+0

@samar 'print (as.numeric (commandArgs (TRUE) [1]))' prints '[1] 10'. – marcog

+0

Acabo de encontrar la respuesta. x <- (commandArgs (TRUE) [1]) y luego CorrAns <- eval (parse (text = x)) – samar

1

Lectura de la docs, parece que pueda necesitar para eliminar el TRUE de la llamada a commandArgs() que no se llama a la secuencia de comandos con --args. O eso, o necesita llamar al Rscript Graphs.R --args 10.

Uso

commandArgs(trailingOnly = FALSE)

Argumentos

trailingOnly lógico. ¿Deberían devolverse solo argumentos después de --args?

+0

Intenté esto y me dieron el siguiente mensaje de error – samar

+0

Gracias.Hice esto pero el mensaje de error es idéntico al que primero informé – samar

+0

@samar ¿Ves mi nueva respuesta y veo si eso ayuda? – marcog

5

Sólo una conjetura, tal vez usted necesita para convertir CorrAns de un personaje a numérica, ya que la sección Valor de ?CommandArgs dice:

Un vector de caracteres que contiene el nombre del ejecutable y el suministrado por el usuario argumentos de línea de comando.

ACTUALIZACIÓN: Podría ser tan fácil como:

#!/bin/Rscript 
args <- commandArgs(TRUE) 
(CorrAns = args[1]) 
(CorrAns = as.numeric(args[1])) 
+0

Gracias. No estoy seguro de cómo implementar eso. No creía que los nombres de variables en R estuvieran vinculados a caracteres ni numéricos. Sin embargo, verificará de nuevo el libro de Introducción R. – samar

+0

@samar Sugeriría probar 'as.numeric (args [1])' como lo hice en mi respuesta actualizada. –

+0

Muchas gracias. Este es un sitio nuevo para mí, así como R es una experiencia nueva para mí. Ambos proporcionan una gran satisfacción. – samar

0

Rscript args.R 10 donde 10 es el valor numérico que queremos pasar al script R.

print(as.numeric(commandArgs(TRUE)[1]) imprime el valor que puede asignarse a una variable.

+0

Esto es lo mismo que mi respuesta actualizada, y la respuesta que usted aceptó como "mejor" no responde a su pregunta. –

+0

Joshua, hasta donde yo sé, adapté la respuesta de marcog a mis necesidades y luego la ingresé como la "mejor" respuesta. No recuerdo que tu última respuesta fue visible en ese momento. Sin embargo, aprecio la ayuda. – samar

Cuestiones relacionadas