2011-06-30 19 views
10

Estoy trabajando con un código R que genera varias imágenes como archivos png; sin embargo, un archivo Rplots.pdf sigue generándose en el directorio de trabajo, ¿hay alguna manera de evitar que esto suceda?¿Cómo evito que se genere Rplots.pdf?

library(Cairo) 
CairoPNG(file = "graphs.png") 
nf <- layout(matrix(c(1:8), 2, 4, byrow=T), c(1, 1), c(1, 1, 1, 1), TRUE) 
for (k in 1:num.k) { 
    plotMatrix(connect.matrix.ordered[k,,], log = F, main = paste("k=", k.vector[k]), sub = paste("Cophenetic coef.=", rho[k]), ylab = "samples", xlab ="samples") 
} 
y.range <- c(1 - 2*(1 - min(rho)), 1) 
plot(k.vector, rho, main ="Cophenetic Coefficient", xlim=c(k.init, k.final), ylim=y.range, xlab = "k", ylab="Cophenetic correlation", type = "n") 
lines(k.vector, rho, type = "l", col = "black") 
points(k.vector, rho, pch=22, type = "p", cex = 1.25, bg = "black", col = "black") 
dev.off() 
+0

¿Querías decir 'Rplots.png' ?? No puedo ver cómo la respuesta de @ Andrie detendría la creación de un dispositivo PDF, pero puede ver que es una solución si realmente quieres decir 'Rplots.png' ??? –

+0

@Gavin Simpson - Cerrar, ahora hay un archivo 'Rplot001.png' que se genera y no se limpia. – rjzii

+0

No puedo reproducir su problema (en parte porque su ejemplo no es autocontenido). ¿Algo más simple como el siguiente también produce el archivo deshonesto? 'biblioteca (El Cairo); CairoPNG (file = "graphs.png"); diseño (matriz (c (1: 4), 2)); para (k en 1: 4) gráfico (1, k); dev.off() ' – Aaron

Respuesta

9

Me pregunto si tiene otra comando que abre un dispositivo antes o después del fragmento de código que nos ha proporcionado. Cuando hayas terminado, ejecuta dev.cur() para ver si había un dispositivo abierto. Si no, debería devolver el dispositivo nulo.

Aquí hay maneras en que puede recrear obteniendo un Rplots.pdf o un Rplot001.png; los comandos layout y par abren un dispositivo si uno no está abierto, y como no se ha proporcionado ningún nombre de archivo, usa el nombre de archivo predeterminado.

options(device="pdf") 
layout(1:4) 
dev.off() 

options(device="png") 
par() 
dev.off() 

Tal vez ver que suceda aquí le dará una pista de lo que está sucediendo con su código.

+1

Esto terminó siendo el problema: un diagrama que se genera sin que se haya abierto un archivo para él. Sin embargo, la ubicación es muy oscura en el código. – rjzii

2

Aquí está el código fuente de CairoPNG:

function (filename = "Rplot%03d.png", width = 480, height = 480, 
    pointsize = 12, bg = "white", res = NA, ...) 
{ 
    Cairo(width, height, type = "png", file = filename, pointsize = pointsize, 
     bg = bg, ...) 
} 

Esto le indica que CairoPNG toma filename=... como parámetro, y pasa esto a Cairo como parámetro file.

puedo ver cómo esto puede llevar a confusión, pero el punto es que su llamada a CairoPNG debe ser:

CairoPNG(filename="graphs.png") 

ver si funciona ...

+0

Eso va un largo camino para resolver el problema, pero parece que 'options (device =" png ")' también es necesario para que todo funcione correctamente. – rjzii

+0

Se realizó una comprobación más y cuando se genera 'options (device =" png ")' en un archivo 'Rplot001.png', del mismo modo, si está desactivado, se genera' Rplots.pdf'. ¿Alguna idea de lo que podría estar pasando? El archivo 'Rplot001.png' sí tiene datos válidos de un informe agregado. – rjzii

+0

Lo siento, no. Nunca he usado 'Cairo'. :-( – Andrie

3

Sé que esta es una publicación muy antigua y seguramente el OP ha resuelto esto. Pero me encontré con esta situación similar mientras trabajaba con plotly. La conversión de una salida de ggplot a una salida de la gráfica generó el error similar de no poder abrir el archivo 'Rplots.pdf'.

lo solucioné simplemente incluyendo:

pdf(NULL) 

No estoy seguro de la razón del error, no han sido capaces de darse cuenta de eso, pero esta pequeña línea ayudó a eliminar el error y mostrar mi diagramas como lo esperaría en combinaciones plotly y ggplot.

0

Tuve un problema similar recientemente después de actualizar a R-3.0.3 (¡sí, estamos un poco retrasados!). Resulta que la paleta ("predeterminada") abre un dispositivo ahora, aunque no solía hacerlo.

Cuestiones relacionadas