2012-06-13 24 views
8

Tengo un script bash que rastrea el uso de memoria a lo largo del tiempo a medida que se ejecuta un comando. Genera el comando deseado y luego escribe un registro con column1 = "memoria en uso por programa (gigs)" y la columna 2 es el tiempo transcurrido hasta el momento en segundos. p.ej.Trazado y guardado gráfico 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 

Lo que quiero hacer es esperar hasta que el proceso esté completo y luego utilizar R para trazar un gráfico del uso de la memoria en el tiempo y lo guarda en el directorio actual. Yo estaba jugando con R y sé exactamente lo que los comandos que necesito utilizar:

> 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 

Pero la parte que estoy atascado en el gráfico es el ahorro como un jpg o png. O cómo podría ejecutar este comando dentro de mi script bash. ¿Necesitaría absolutamente tener otro script escrito en lenguaje R y ejecutarlo? ¿Sería posible hacer todo en uno?


Editar

Este es el código para mi 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() 

¿Alguien puede ayudar por qué el texto no se imprime el valor máximo en el png emitida? Lo estoy llamando en un script bash como R CMD BATCH script.r script.out

+0

¿Por qué no calcula el 'max()' de 'heisenberg $ V1' y' heisenberg $ V2'? en este momento está calculando un valor que es el valor más grande en el marco de datos 'heisenberg' para las ** ** coordenadas (xey), por lo que no es de extrañar que no aparezca en el gráfico; está fuera de la trama.Creo que quiere: 'con (heisenberg, texto (max (V2), max (V1), max (V1)))' al menos eso es lo que sugiere el fragmento de código original que mostró. ¿Te das cuenta de que el nuevo código no coincide con el sí original? –

+0

Al mirar más de cerca, sí me doy cuenta de la diferencia ahora. Eso es porque simplemente abrí la secuencia de comandos.r que la secuencia de comandos bash de salida, pero me olvidé de escapar del $. Por lo tanto, se interpretaron como variables nulas. Voy a probar la declaración con como dijiste. Para que quede claro, lo que quiero es mostrar el valor máximo en el gráfico con una pantalla de texto. –

Respuesta

12

Envuelva su parcela de llamadas en:

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

o

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

Ver sus respectivas páginas de ayuda: ?png para obtener detalles de otros argumentos.

Para un PNG esto sería:

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

En cuanto a la ejecución de este en una escritura del golpe, es necesario invocar R para ejecutar la secuencia de comandos que contiene el código R para cargar los datos y sacar las parcelas. Para ello existen varias opciones, dos son:

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

o uso Rscript

Rscript my_script.R 

donde my_script.R es un archivo de texto que contiene código R-sintácticamente válida requerida para producir las parcelas.

+0

Entonces, ¿hay alguna manera de hacer esto dentro de mi script bash? ¿Es posible usar R en la línea de comandos? –

+1

source ("file.r") - Esto ejecutará un archivo de comandos R. – LanceH

+0

Consulte '? RScript' para obtener detalles de una interfaz de scripts en R. Hay otras formas, es decir, usando' R CMD BATCH'. Pero esta es otra pregunta, por lo que debes hacer otra pregunta sobre ese tema. –

Cuestiones relacionadas