2012-06-02 13 views
7

Sto usando R studio.C'è un modo per sapere se uno script R è in esecuzione direttamente o all'interno di un altro script?

C'è un modo per sapere se uno script R viene eseguito direttamente dal comando di origine nella console) o all'interno di un altro script. vale a dire. un altro script è originario e questo ha la chiamata al primo script.

Questo può essere utile per richiedere alcuni valori in alcuni casi.

Quello che sto facendo ora è impostare una variabile su true o false e all'interno dello script controllo la variabile. Funziona, ma un modo automatico è migliore.

Grazie per il vostro tempo.

EDIT >>> Maggiori informazioni

Diciamo che ho uno script indipendente che funziona bene così com'è, ma questo script è parte di un processo a rincorrere un altro script finito. Se devo eseguire entrambi, posso eseguire il primo, poi il secondo; ma ho anche la possibilità di eseguire il secondo.

Quello che sto chiedendo è se c'è un modo (nel secondo script) per verificare se questo secondo è stato chiamato dal primo o no.

Date un'occhiata ai suoi semplici esempi (ispirata alla risposta da 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") 

Il risultato in Rstudio è

Mi piace avere qualcosa come

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

Spero ora sia più chiaro.

Grazie

+1

Potresti chiarire un po 'il motivo per cui utilizzi questa configurazione? Mi sembra un po 'arcano ... –

risposta

1

Se ho capito bene, un semplice comando message() dovrebbe fare quello che (credo) è necessario. Dal momento che si sta chiamando uno dei numerosi scritti sulla base di controlli logici, quindi avere un messaggio eco all'inizio di ogni script come:

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

dovrebbe farlo. Se uno script non viene mai chiamato perché alcune variabili sono impostate su FALSE, non vedrai mai questo messaggio.

Se è necessario per richiedere, e leggere i valori dalla console, quindi inserendo una linea come:

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

sarebbe anche utile a voi.

5

Non è una risposta diretta alla tua domanda, ma una correlata è guardare la funzione interactive.Questa funzione restituirà TRUE se R ritiene di essere in una sessione interattiva ed è ragionevole supporre che una persona sia disponibile a rispondere alle domande, restituirà FALSE se è in esecuzione in modalità BATCH ed è abbastanza certo che non ci sono umani (o alieni, animali intelligenti, ecc.) per rispondere alle domande.

Non esattamente quello che stavi chiedendo, ma potrebbe essere utile per decidere se richiedere informazioni.

+0

Grazie per la risposta. Apparentemente R studio lo ha impostato come VERO e non posso ottenere nient'altro. Questo è gentile quello che sto cercando. Ho appena aggiunto più informazioni alla mia domanda per ogni evenienza. – notuo

+0

@notuo, Se hai il controllo completo su entrambi gli script, l'approccio migliore è probabilmente creare una variabile o impostare un'opzione nello script A, quindi nello script B controllare l'opzione o l'esistenza della variabile, quindi nello script A cambiare la opzione o variabile prima di uscire. –

Problemi correlati