2012-06-02 10 views
7

Estoy usando R studio.¿Hay alguna manera de saber si un script R se ejecuta directamente o dentro de otro script?

Hay una manera de saber si una secuencia de comandos R se ejecuta directamente mediante el comando de origen en la consola) o dentro de otra secuencia de comandos. es decir. otro script se origina y tiene la llamada al primer script.

Esto puede ser útil para solicitar algunos valores en algunos casos.

Lo que estoy haciendo ahora es establecer una variable en verdadero o falso y dentro del script verifico esa variable. Esto funciona, pero una forma automática es mejor.

Gracias por su tiempo.

EDITAR >>> Más información

Digamos que tengo un script independiente que funciona bien como está, pero este guión es parte de un proceso que correr detrás de otro guión terminado. Si tengo que ejecutar ambos, puedo ejecutar el primero, luego el segundo; pero también tengo la oportunidad de correr el segundo.

Lo que estoy preguntando es si hay una manera de (en el segundo script) verificar si este segundo fue llamado desde el primero o no.

Tome un vistazo a sus ejemplos sencillos (inspirado por la respuesta de Greg Snow)

scripta.R:

writeLines("script A") 
if (interactive()) writeLines("interactive: true") else writeLines("interactive false") 
source("scriptb.r") 

scriptb.R:

writeLines("script B") 
if (interactive()) writeLines("interactive: true") else writeLines("interactive false") 
writeLines("end B") 

El resultado en rstudio es

script A 
interactive: true 
script B 
interactive: true 
end B 
after B 

Me gusta tener algo como

script A 
interactive: true 
script B 
interactive: false 
end B 
after B 

Espero que ahora esté más claro.

Gracias

+1

¿Podría arrojar algo más de luz sobre por qué usa esta configuración? Suena un poco arcano para mí ... –

Respuesta

1

Si he entendido bien, un simple comando message() debe hacer lo que (creo) que necesita. Puesto que usted está llamando a uno de varios guiones basados ​​en controles lógicos, y luego tener un mensaje eco al inicio de cada secuencia de comandos como:

message("R has now entered script_1.R \n")

debe hacerlo. Si nunca se llama a un script porque alguna variable está configurada en FALSE, nunca verá este mensaje.

Si necesita para solicitar y leer los valores de la consola, a continuación, insertar una línea como:

new_input <- readline("Enter a value for x: ")

también sería de utilidad para usted.

5

No es una respuesta directa a su pregunta, pero una relacionada es mirar la función interactive.Esta función devolverá TRUE si R cree que está en una sesión interactiva y es razonable suponer que una persona está disponible para responder preguntas, devolverá FALSE si se ejecuta en modo BATCH y es bastante seguro que no hay humanos (o alienígenas, animales inteligentes, etc.) para responder preguntas.

No es exactamente lo que estaba preguntando, pero puede ser útil para decidir si solicitar información.

+0

Gracias por su respuesta. Aparentemente R studio estableció esto como VERDADERO y no puedo obtener nada más. Esto es amable lo que estoy buscando. Acabo de agregar más información a mi pregunta por si acaso. – notuo

+0

@notuo, si tiene control completo sobre ambos scripts, entonces el mejor enfoque es probablemente crear una variable o establecer una opción en el script A, luego en el script B verificar la opción o existencia de la variable, luego en el script A cambiar el opción o variable antes de salir. –

Cuestiones relacionadas