2012-06-13 38 views
8

Mam skrypt basha, który śledzi użycie pamięci w czasie, gdy uruchamiane jest polecenie. Tworzy żądane polecenie, a następnie zapisuje log z kolumną1 = "pamięć używana przez program (koncerty)", a kolumna 2 to czas, który upłynął do tej pory w ciągu kilku sekund. na przykładWykreślanie i zapisywanie wykresu R

31.282 1470 
31.565 1480 
31.848 1490 
31.989 1500 
32.273 1510 
32.414 1520 
32.697 1530 
32.980 1540 
33.122 1550 
33.405 1560 
6.511 1570 
6.935 1580 
7.502 1590 
7.926 1600 
8.351 1610 
8.775 1620 
9.059 1630 
9.483 1640 
9.908 1650 
10.333 1660 

Co chcę zrobić, to poczekać, aż proces się zakończy, a następnie użyć R, aby wykreślić wykres zużycia pamięci w czasie i zapisać go w bieżącym katalogu. Grałem około R i wiem dokładnie, co nakazuje muszę używać:

> heisenberg <- read.csv(file="4644.log",head=FALSE,sep=" ") 
> plot(heisenberg$V2,heisenberg$V1,type="o",col="red",main="Memory Usage Over Time",xlab="Time (seconds)",ylab="Memory (gigabytes)") 
> text(max(heisenberg$V2),max(heisenberg$V1),max(heisenberg$V1)) #Displays max value 

Ale część siedzę na zapisuje wykres jako jpg lub png. Albo jak mogłem wykonać to polecenie w moim skrypcie basha. Czy koniecznie musiałbym mieć inny skrypt napisany w języku R i uruchomić go? Czy byłoby to możliwe, aby zrobić wszystko w jednym?


Edit

Oto kod dla mojego script.r

png("mem_usage_2965.png",height=800,width=800) 
heisenberg <- read.csv(file="2965.log",head=FALSE,sep=" ") 
plot(heisenberg$V2,heisenberg$V1,type="o",col="red",main="oases_k85",xlab="Time (seconds)",ylab="Memory (gigabytes)") 
text(max(heisenberg),max(heisenberg),max(heisenberg)) 
dev.off() 

Czy ktoś może pomóc, dlaczego tekst nie drukuje wartość maksymalną w podawanych PNG? Nazywam to skryptem typu bash, takim jak R CMD BATCH script.r script.out

+0

Dlaczego nie obliczasz 'max()' z 'heisenberg $ V1' i' heisenberg $ V2'? w chwili, gdy obliczasz wartość, która jest największą wartością w ramce danych 'heisenberg' dla ** obu ** współrzędnych (x i y), więc nic dziwnego, że nie pojawia się na wykresie; to jest poza działką.Myślę, że chcesz: 'with (heisenberg, text (max (V2), max (V1), max (V1)))" przynajmniej to jest sugerowane przez oryginalny fragment kodu, który pokazałeś. Zdajesz sobie sprawę, że nowy kod nie pasuje do oryginału "tak"? –

+0

Po dokładniejszym przyjrzeniu się, tak, teraz zdaję sobie sprawę z różnicy. To dlatego, że po prostu otworzyłem skrypt.r, że wynik skryptu basha, ale zapomniałem uciec z $. W ten sposób zostały zinterpretowane jako zmienne zerowe. Spróbuję z takim stwierdzeniem, jak powiedziałeś. Aby było jasne, chcę wyświetlić maksymalną wartość na wykresie za pomocą wyświetlacza tekstowego. –

Odpowiedz

12

Owiń działkę nazywa się:

jpeg("myplot.jpg") 
....plot code here.... 
dev.off() 

lub

png("myplot.png") 
....plot code here.... 
dev.off() 

Zobacz swoje odpowiednie strony Pomoc: ?png szczegóły innych argumentów.

Dla PNG byłoby to:

png("my_plot.png", height = 800, width = 600) 
plot(heisenberg$V2,heisenberg$V1,type="o",col="red",main="Memory Usage Over Time",xlab="Time (seconds)",ylab="Memory (gigabytes)") 
text(max(heisenberg$V2),max(heisenberg$V1),max(heisenberg$V1)) #Displays max value 
dev.off() 

chodzi o prowadzenie to w skrypcie bash, trzeba powołać R, aby uruchomić skrypt zawierający kod R, aby załadować dane i rysować wykresy. Do tego istnieje kilka opcji, dwa są:

R CMD BATCH --no-save --no-restore my_script.R 

lub użyj Rscript

Rscript my_script.R 

gdzie my_script.R jest plikiem tekstowym zawierającym składniowo-poprawny kod R wymaganych do wytworzenia działek.

+0

Czy istnieje sposób, aby to zrobić w moim skrypcie Bash? Czy można używać R w linii poleceń? –

+1

source ("file.r") - Spowoduje to wykonanie pliku poleceń R. – LanceH

+0

Zobacz '? RScript', aby uzyskać szczegółowe informacje na temat interfejsu skryptowego do R. Istnieją inne sposoby, tj. Użycie' R CMD BATCH'. Ale to jest kolejne pytanie, więc powinieneś zadać kolejne pytanie na ten temat. –

Powiązane problemy