2011-08-04 15 views
5

Me preguntaba si es posible pasar parámetros a RGui desde el símbolo del sistema en Windows. me gustaría hacer algo comoAl pasar el script como parámetro a RGui

RGui myScript.r param1 param2 

al igual que haría con RSCRIPT pero tengo que mostrar una interfaz gráfica de usuario.

Aquí hay más información sobre mis necesidades. Quiero incrustar una guía escrita en R en mi aplicación de formularios C#. Lo que sucederá es presionar un botón en el formulario y la aplicación inicia un proceso que llama a RGui con mi script y algunos parámetros. Hasta ahora, esto ha funcionado bien con RScript pero ahora que estoy visualizando gráficos necesito que R esté en modo interactivo. Aquí está el código que estoy utilizando:

 myProcess.StartInfo.FileName =Pathing.GetUNCPath(r_path) + "\\Rscript"; 
     string script_path=Directory.GetParent(AppDomain.CurrentDomain.BaseDirectory).Parent.Parent.Parent.FullName.ToString(); 
     myProcess.StartInfo.Arguments = Pathing.GetUNCPath(script_path) + "\\display.r " + data_path; 
     myProcess.StartInfo.UseShellExecute = true;   
     myProcess.Start(); 
     myProcess.WaitForExit(); 
+1

Prettymuch un duplicado de http://stackoverflow.com/questions/6940022/running-r-interactively-from-windows-command-prompt –

+2

@Jack Maney: Oh no, no lo es. Hay una gran diferencia entre Rscript y RGui. De hecho, lo que OP pide aquí es muy posible con Rscript, y es muy imposible con RGui. –

+2

@Jack, no creo que sea un duplicado. Esta pregunta le pregunta si puede enviar objetos (o llamadas) a través de instancias de R, mientras que la Q a la que se conecta le pregunta cómo iniciar una sesión interactiva de R. –

Respuesta

7

Como se ha dicho, que normalmente no puede hacer eso. Si ingresas a tu Rprofile o Rprofile.site (mira? Inicio para más información, o this site), puedes ir por ahí, pero el código no es portátil para otras computadoras. Entonces, si te sientes realmente afortunado y te atreves, puedes intentar hacer lo siguiente.

Agregue este código a su archivo Rprofile o Rprofile.site (que se puede encontrar en la carpeta/etc de su R instalar):

Args <- commandArgs(trailingOnly=TRUE) 
if(length(Args)>0 & sum(grepl(" -f ",commandArgs()))==0){   
    if(grepl("(?i).r$",Args[1])){ 
     File <- Args[1] 
     Args <- Args[-1] 
     tryCatch(source(File) , error=function(e) print(e)) 
    } 
} 

Esto le permitirá hacer:

Rgui --args myscript.r arg1 arg2 
Rscript myscript.r arg1 arg2 
R --args myscript.r arg1 arg2 
R -f myscript.r --args arg1 arg2 

El argumento --args se ocupará de las ventanas emergentes que advierte @iterator. El código dará como resultado una variable Args que está contenida en el entorno base (que es no .GlobalEnv!). Esta variable contiene todos los argumentos además del nombre del archivo. Puede acceder posteriormente que uno de su secuencia de comandos, por ejemplo:

#dumb script 
print(Args) 

Si se llama con Rgui o R, también habrá un archivo variable que contiene el nombre del archivo que ha sido origen.

Recuerda que cambiar tu rProfile no es portátil para otras computadoras. Así que esto es solo para uso personal. Tampoco puedes dar -f como parámetro después de --args, o obtendrás errores.

Editar: Es mejor que busquemos "-f" que "-f", ya que esto puede ocurrir en "path/to/new-files /".

+0

+1 Brillante! ¡Enojado! Creo que lo mismo debería aplicarse a cualquier archivo señalado por 'R_PROFILE' en la variable de entorno, por lo que no tiene que estar en el archivo' .Rprofile'. Pero, no soy un maestro de esto como @Joris. ;-) – Iterator

+0

Estoy favoreciendo esta pregunta debido a esta respuesta. Es genio – Iterator

+0

@jakob r Thx para la edición, tiene sentido. –

3

(ACTUALIZADO) ADVERTENCIA: esto "trabajo" pero es muy poco aconsejable. Por lo que puedo decir, Rgui no tiene la intención de tomar esos parámetros de script. @Joris me señaló que la lista de parámetros aceptables se enumera en Rgui --help.

Si sigues el siguiente método, algunas personas pensarán que estás en camino a la locura. Por otro lado, los locos pueden pensar que eres un genio. Todos estarán de acuerdo en que no deberías hacer esto en cosas que usan.

Fin de las advertencias.

Si el script se llama .Rprofile, se obtendrá. Si crea un archivo .Rprofile (o una variable de entorno) que dice commandArgs(), puede configurarlo para analizar la línea de comando.

Obtendrá errores/ignorar las ventanas emergentes de R. Eso es para identificar que algo malo se ha hecho.

Por lo que vale la pena, esto puede estar en la lista de tareas pendientes para rstudio: http://support.rstudio.org/help/discussions/problems/823-pass-command-line-parameters-to-r

+1

Y rompen un montón de otras cosas, incluyendo ser absolutamente imposible de usar. Si alguien me da un código así, podría considerar comprar un rifle ... –

+0

@Joris: si espera hasta entonces, puede ser demasiado tarde. :) – Iterator

+0

@Joris: Y ahora estás produciendo código como este. :) – Iterator

Cuestiones relacionadas