2016-06-11 8 views
2

ich folgendes beachten Sie, klicken Sie auf HERE:R läuft in GUI oder nicht?

ich die gleiche Frage stellen, in dem Sinne, dass ich muss wissen, ob meine R Umgebung von Terminal ausgeführt wurde, oder in einer GUI-Typ-Umgebung.

Die Motivation für meine Frage ist produziere ich eine Reihe von .pdf Berichte und, wenn der Benutzer die Funktionen, die für die Berichte unter GUI erzeugen aufgerufen hat, dann möchte ich die Berichte öffnen, das System standardmäßig .pdf Programm, aber Wenn das Skript über die Befehlszeile oder über eine Sitzung in der Befehlszeile ausgeführt wurde, sollte dies unterdrückt werden.

In RStudio, wenn ich interactive() laufe, ist das Ergebnis TRUE, und wenn ich eine R-Sitzung am Terminal öffnen und den gleichen Befehl ausführen, das Ergebnis ist auch TRUE, so meine Frage im Wesentlichen ist, wie kann ich unterscheiden ? Ich benutze MacOSX, möchte aber, dass die Antwort für Mac, Unix und Windoze relevant ist.

Cheers,

+1

Wenn Sie sagen, „öffnen Sie eine R-Sitzung am Terminal“ öffnen Sie das Terminal und Ausführen von "R" oder "R CMD BATCH"? – Benjamin

+0

'echo interactive() '| R 'sagt' FALSE', damit es richtig funktioniert. Die Frage ist, ob Sie wirklich herausfinden wollen, ob eine GUI läuft oder möchten Sie herausfinden, ob R interaktiv läuft (in diesem Fall würde 'interactive()' ausreichen)? –

+0

Ich führe 'R', NICHT' R CMD BATCH' aus, also Sitzungen, die über 'R' geöffnet wurden, oder Sitzungen, die über ausführbares R - Skript laufen' #!/Usr/bin/env Rscript' sollten 'FALSE' zurückgeben, wenn Sitzung wird in etwas wie RStudio ausgeführt, sollte es 'TRUE' zurückgeben –

Antwort

2

commandArgs() ausgeben wird die Befehlszeile, die die R-Sitzung gestartet und .Platform$OS.type das OS berichten so:

switch(.Platform$OS.type, 
    windows = if (grepl("Rterm", commandArgs())) cat("terminal\n") else cat("GUI\n"), 
    ...fill in for each other operating system... 
)