2015-11-11 20 views
12

Devo eseguire lo strumento esterno da R e gli errori di processo (se presenti) si sono verificati in quello strumento. So 3 funzioni per fare qualcosa di familiare con il mio compito:Le funzioni di sistema R restituiscono sempre l'errore 127

shell, system and system2. 

Thying a testare quelli, vedo che il comando

shell("notepad") 

apre blocco note. Per quanto ne so shell non consente di controllare gli errori (non c'è un'interfaccia per guardare in stderr).

Quando chiamo

system("notepad") 

o

system2("notepad") 

R blocca cercando di fare quei comandi.

Calling

system("start notepad") 

o

system2("start notepad") 

rendimenti avvertimento

Warning message: 
running command '"start notepad"' had status 127 
+0

Il problema si riduce a "notepad' non presente nel PERCORSO e quindi non è visibile a R per eseguirlo. Sulla mia macchina, posso chiamare 'system (" java -version ")' senza problemi. Stranamente, non sono riuscito a far aprire il Blocco note da R anche dopo averlo aggiunto al mio PERCORSO. –

+0

Posso anche far funzionare 'system (" git version ")'. Potrebbe esserci un problema con i programmi non a riga di comando in R. Perché vuoi aprire Blocco note da R posso chiedere? –

+0

> system ("versione git") Messaggio di avviso: comando di esecuzione 'git version' aveva stato 127 – Powerfool

risposta

4

Come ho detto nei miei commenti, la documentazione R rivela che in Windows la funzione system() non viene avviato un shell separata (se necessario). Questo è il motivo per cui riga di comando comandi vengono eseguiti con system(), ma il Blocco note, che ha bisogno di una finestra separata, non viene eseguito:

Dal documentation per system():

La differenza più importante è che in un sistema Unix-alike il sistema avvia una shell che esegue il comando. Su Windows il comando viene eseguito direttamente - utilizza shell per un'interfaccia che esegue il comando tramite una shell (per impostazione predefinita, la shell di Windows cmd.exe, che presenta molte differenze rispetto a una shell POSIX).

3
system("bash -l", input = "notepad") 
12

Adattamento @ risposta di DavidTseng (spiacente per non avere abbastanza reputazione per upvote esso) ...

system("cmd.exe", input = "notepad") 

ha lavorato per me in Windows.

Problemi correlati