2010-07-21 16 views
24

Mam mały skrypt powłoki (bash), który uruchamia skrypt R, który generuje wykres jako wynik. Wszystko działa dobrze, ale zaraz po zakończeniu renderowania R kończy się. Czy istnieje sposób, aby utrzymać sesję R przy życiu, dopóki okno wykresu nie zostanie zamknięte.Uruchamianie skryptów R z działkami

Skrypt powłoki.

#!/bin/bash 
R --slave --vanilla < myscript.r 

A skrypt R.

daq = read.table(file('mydata.dat')) 
X11() 
pairs(daq) 
//R Completes this and then exits immediately. 

Z góry dziękuję za pomoc!

Odpowiedz

26

Jeśli użyć polecenia Rscript (który lepiej nadaje się do tego celu), należy uruchomić go tak:

#!/usr/bin/Rscript 

daq = read.table(file('mydata.dat')) 
X11() 
pairs(daq) 

message("Press Return To Continue") 
invisible(readLines("stdin", n=1)) 

Upewnij się, aby ustawić uprawnienie EXECUTE myscript.r, a następnie uruchomić jak:

/path/to/myscript.r 

lub bez shebang:

Rscript /path/to/myscript.r 
+3

To nie jest dobre, ponieważ OP chciał, aby skrypt zakończył się po zamknięciu wykresu, a nie po naciśnięciu klawisza. – mbq

+0

To działa wystarczająco dobrze, po prostu potrzebowałem, aby wyświetlacz pozostawał otwarty wystarczająco długo, aby działka mogła być przeglądana po zakończeniu skryptu powłoki. –

+3

To nie działa dla mnie. Wykres nigdy nie pojawia się ... (w oknach) –

3

To nie jest idealne rozwiązanie, ale możesz zadzwonić pod numer locator() tuż po poleceniu fabuły.
Lub po prostu zapisz działkę w formacie pdf, a następnie wywołaj na niej przeglądarkę pdf, używając system.

2

Jednym rozwiązaniem byłoby napisać fabułę się pdf zamiast:

pdf(file="myplot.pdf") 

##your plot command here 
plot(. . .) 

dev.off() 
0

Ważniejsze pytanie brzmi: dlaczego chcesz R, aby uruchomić po utworzeniu wykresu? Użyj go w trybie interaktywnym lub w trybie wsadowym ... Nie rozumiem, co chcesz osiągnąć. Poza tym spróbuj littler, znajduje się on w repozytoriach Ubuntu (repozytoriach wszechświata, jeśli mam rację), lub Rscript, więc przepisz swój skrypt i nazwij go myscript.r, i upewnij się, że wstawiłeś poprawną ścieżkę w pierwszym wierszu. Wypróbuj whereis Rscript (zwykle/usr/bin/Rscript). Zapomnij o skrypcie bash. Można przekazać --vanilla i --slave argumentów Rscript, ale nie widzę cel ... O_o

10

Można dodać pętlę, która sprawdza, czy urządzenie graficznego co n sekundach:

while (!is.null(dev.list())) Sys.sleep(1) 

To będzie działać, dopóki nie zamkniesz okna wykresu.

+0

To znacznie lepiej, nawet koniec pozwala użytkownikowi zmienić rozmiar okna i tak dalej. – csl

Powiązane problemy