r - quimicos - alimentos que contienen aditivos
El uso de la función png no funciona cuando se llama dentro de una función (2)
Tengo una función que hace cosas y luego traza en función de una condición:
f <- function(n) {
rand <- rnorm(n)
no <- seq_len(n)
df <- data.frame(no=no, rand=rand)
if (n > 10) {
png("plot.png")
p <- ggplot(df)
p + geom_point(aes(x=no, y=rand))
dev.off()
}
}
f(11)
Obtengo un archivo png en blanco al final de esto. ¿Que esta pasando aqui?
Acabo de aprender de otro sitio web (enlace proporcionado a continuación). En un bucle, debe usar explícitamente la función de impresión para hacer funcionar la función jpeg (), png (). En la publicación original, puede agregar una línea de impresión (p).
if (n > 10) {
png("plot.png")
p <- ggplot(df)
p + geom_point(aes(x=no, y=rand))
print(p)
dev.off()
}
En el siguiente enlace, proporciona una buena explicación para esto https://stat545-ubc.github.io/block017_write-figure-to-file.html#despair-over-non-existent-or-empty-figures
De las respuestas, aquí hay dos soluciones:
library(ggplot2)
f <- function(n) {
rand <- rnorm(n)
no <- seq_len(n)
df <- data.frame(no=no, rand=rand)
if (n > 10) {
png("plot.png")
print({
p <- ggplot(df)
p + geom_point(aes(x=no, y=rand))
})
dev.off()
}
}
f(11)
Nota: sabía que necesitaba usar print()
, pero la forma en que lo probé no funcionó porque no se colocó en el lugar correcto.
Además, había probado la opción ggsave
anteriormente, pero tampoco funcionó. Por supuesto, ahora también funciona. También parece tener una resolución mejor que usar png()
:
library(ggplot2)
f <- function(n) {
rand <- rnorm(n)
no <- seq_len(n)
df <- data.frame(no=no, rand=rand)
if (n > 10) {
p <- ggplot(df)
p + geom_point(aes(x=no, y=rand))
ggsave(file="plot.png")
}
}
f(11)
Gracias a todos.