2012-06-13 2 views
8

У меня есть скрипт bash, который отслеживает использование памяти во времени по мере запуска команды. Он генерирует нужную команду, а затем записывает журнал с помощью столбца1 = «память, используемая программой (концертами)», а столбец 2 - это время, прошедшее за несколько секунд. напримерПостроение и сохранение графика 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 

То, что я хочу сделать, это ждать, пока процесс не будет завершен, а затем использовать R, чтобы построить график использования памяти с течением времени и сохранить его в текущем каталоге. Я играл с R, и я точно знаю, какие команды нужно использовать:

> 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 

Но часть я застрял на сохраняет график в виде JPG или PNG. Или как я мог выполнить эту команду в моем сценарии bash. Мне нужно было бы иметь еще один скрипт, написанный на языке R, и запустить его? Можно ли сделать все в одном?


Редактировать

Вот код для моего 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() 

Может кто-нибудь помочь, почему текст не печатается максимальное значение в выводимой PNG? Я называю это сценарием bash, например R CMD BATCH script.r script.out

+0

Почему вы не вычисляете 'max()' 'heisenberg $ V1' и' heisenberg $ V2'? на данный момент вы вычисляете значение, которое является наибольшим значением в кадре данных «heisenberg» для ** обеих ** координат (x и y), поэтому неудивительно, что он не появляется на графике; это вне сюжета.Я думаю, что вы хотите: 'с (heisenberg, text (max (V2), max (V1), max (V1))), по крайней мере, это то, что предлагается в исходном фрагменте кода, который вы показали. Вы понимаете, что новый код не соответствует оригинальному да? –

+0

Присмотревшись ближе, да, я понимаю разницу. Это потому, что я просто открыл скрипт.r, который выдает скрипт bash, но я забыл избежать $. Таким образом, они интерпретировались как нулевые переменные. Я попробую сделать заявление, как вы сказали. Чтобы быть ясным, я хочу показать максимальное значение на графике с текстовым дисплеем. –

ответ

12

Оберните участок заезжает:

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

или

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

См свои соответствующие страницы справки: ?png для деталей других аргументов.

Для PNG это будет:

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() 

Что касается запуска этого в Баш скрипт, вам нужно вызвать R для запуска сценария, содержащий код R, чтобы загрузить данные и рисовать графики. Для этого есть несколько вариантов, два являются:

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

или использовать Rscript

Rscript my_script.R 

где my_script.R представляет собой текстовый файл, содержащий синтаксически правильный код R, необходимой для получения участков.

+0

Итак, есть ли способ сделать это в моем сценарии bash? Можно ли использовать R в командной строке? –

+1

source ("file.r") - Это будет выполнять файл из R команд. – LanceH

+0

См. '? RScript' для получения информации о интерфейсе сценариев для R. Существуют и другие способы, например, использование' R CMD BATCH'. Но это еще один вопрос, поэтому вы должны задать другой вопрос по этой теме. –

Смежные вопросы