2012-06-13 39 views
8

Tôi có tập lệnh bash theo dõi việc sử dụng bộ nhớ theo thời gian khi lệnh được chạy. Nó sinh ra lệnh mong muốn và sau đó viết một bản ghi với column1 = "bộ nhớ được sử dụng bởi chương trình (biểu diễn)" và cột 2 là thời gian trôi qua trong vài giây. ví dụ.Vẽ và lưu biểu đồ 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 

Những gì tôi muốn làm là chờ đợi cho đến khi quá trình hoàn tất và sau đó sử dụng R để vẽ một đồ thị sử dụng bộ nhớ theo thời gian và lưu nó trong thư mục hiện hành. Tôi đã chơi đùa với R và tôi biết chính xác những lệnh nào tôi cần sử dụng:

> 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 

Nhưng phần tôi đang mắc kẹt là lưu biểu đồ dưới dạng jpg hoặc png. Hoặc làm thế nào tôi có thể thực hiện lệnh này trong kịch bản bash của tôi. Tôi có hoàn toàn cần phải có một kịch bản được viết bằng ngôn ngữ R và chạy nó? Điều này có thể làm tất cả trong một?


Sửa

Đây là mã cho script.r tôi

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

bất cứ ai có thể giúp giải thích tại sao các văn bản không in giá trị lớn nhất trong png outputted? Tôi đang gọi nó trong một tập lệnh bash như R CMD BATCH script.r script.out

+0

Tại sao bạn không tính toán 'max()' của 'heisenberg $ V1' và' heisenberg $ V2'? tại thời điểm bạn đang tính toán một giá trị là giá trị lớn nhất trong khung dữ liệu 'heisenberg' cho ** cả hai tọa độ ** (x và y) vì vậy không có gì lạ khi nó không xuất hiện trên cốt truyện; nó nằm ngoài cốt truyện.Tôi nghĩ rằng bạn muốn: 'với (heisenberg, văn bản (max (V2), max (V1), max (V1)))' ít nhất đó là những gì được gợi ý bởi đoạn mã gốc bạn đã cho thấy. Bạn có nhận ra mã mới không khớp với mã gốc không? –

+0

Khi nhìn kỹ hơn, tôi có nhận ra sự khác biệt ngay bây giờ. Thats bởi vì tôi chỉ đơn giản là mở script.r rằng đầu ra kịch bản bash, nhưng tôi đã quên để thoát khỏi $. Vì vậy, chúng được hiểu là biến null. Tôi sẽ cố gắng với tuyên bố như bạn đã nói. Để được rõ ràng, những gì tôi muốn là để hiển thị giá trị tối đa trên đồ thị với một màn hình hiển thị văn bản. –

Trả lời

12

Quấn cốt truyện của bạn gọi vào:

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

hoặc

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

Xem trang trợ giúp tương ứng của họ: ?png để biết chi tiết các đối số khác.

Đối với một PNG này sẽ là:

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

Đối với hoạt động này trong một kịch bản bash, bạn cần phải gọi R để chạy kịch bản của bạn chứa mã R để tải dữ liệu và rút ra những âm mưu. Đối với điều này có một số tùy chọn, hai là:

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

hoặc sử dụng Rscript

Rscript my_script.R 

nơi my_script.R là một file văn bản chứa mã R cú pháp hợp lệ cần thiết để sản xuất lô.

+0

Vì vậy, có cách nào để làm điều này trong kịch bản bash của tôi? Có thể sử dụng R trong dòng lệnh không? –

+1

nguồn ("file.r") - Điều này sẽ thực thi một tập tin của các lệnh R. – LanceH

+0

Xem '? RScript' để biết chi tiết về giao diện tập lệnh với R. Có nhiều cách khác, tức là sử dụng' R CMD BATCH'. Nhưng đây là một câu hỏi khác, do đó bạn nên hỏi một câu hỏi khác về chủ đề đó. –

Các vấn đề liên quan