Sto usando sempre più Rscript dove avrei normalmente usato gli script di bash. Un piccolo fastidio è che molti di questi script eseguono il ciclo su alcune chiamate system()
che non lasciano praticamente il tempo necessario a R per catturare il mio controllo-c se provo a interromperlo. Invece interrompe semplicemente il comando di sistema che era in esecuzione e continua alla successiva iterazione del ciclo. Ad esempio, quando si tenta di interrompere il seguente tenendo premuto control-c, si fa ancora attraverso tutte le iterazioni:Interrupt loop con comando di sistema
for(i in 1:10) {
cat(i)
system('sleep 3')
}
Finora sono sempre appena violato risolvere questo inserendo una piccola pausa in ogni ciclo come
for(i in 1:10) {
Sys.sleep(0.25)
cat(i)
system('sleep 3')
}
che mi permetta di abortire all'interno di un'iterazione o due se tengo premuto control-c, ma mi chiedo, c'è un modo più efficiente per eseguire questo comportamento?
Ottima domanda. Ho letto alcuni dei guRus dire che qualsiasi programma ben scritto sarà in ascolto di una battuta d'arresto, ma sembra che molti (e certamente tutti i miei) non siano scritti con quella caratteristica. –
Anche qui! Mi infastidisce perché questi script di manutenzione sono di solito per impostare le aree della directory degli esperimenti, quindi usa molti comandi molto veloci 'mkdir',' chmod', 'ln', ecc. Ma quando devo farlo per 1000 soggetti, anche solo con una pausa di 0,25 secondi ci sono circa 5 minuti ogni volta che ne eseguo uno. –
Il ciclo AFAIK an R non è un processo separato, quindi '% kill-9 $ PID' non funzionerà. Ma fammi chiedere: che cosa hai esattamente bisogno di uccidere? Se è un loop over, ad esempio 1: 10000, è possibile inserire un prompt() che viene eseguito ogni 1000 cicli. Se stai eseguendo uno script che è semplicemente molto lungo e hai cambiato idea dopo averlo avviato, beh, è proprio colpa tua :-). –