guerra - ¿Se puede silenciar el comando print() en R?
guerra electronica chile (5)
Estoy de acuerdo con la sugerencia de hadley y mbq de capture.output
como la solución más general. Para el caso especial de las funciones que escribe (es decir, aquellas en las que controla el contenido), use el message
lugar de print
. De esta forma puede suprimir la salida con suppressMessages
.
print.and.return2 <- function() {
message("foo")
return("bar")
}
# Compare:
print.and.return2()
suppressMessages(print.and.return2())
En R, algunas funciones pueden imprimir información y valores devueltos, ¿se puede silenciar la impresión?
Por ejemplo:
print.and.return <- function() {
print("foo")
return("bar")
}
devoluciones
> print.and.return()
[1] "foo"
[1] "bar"
>
Puedo almacenar la devolución como:
> z <- print.and.return()
[1] "foo"
> z
[1] "bar"
>
¿Puedo suprimir la impresión de "foo"
?
Puede usar la naturaleza funcional oculta de R, por ejemplo, definiendo la función
deprintize<-function(f){
return(function(...) {capture.output(w<-f(...));return(w);});
}
que convertirá las funciones de ''impresión'' en ''silenciosas'':
noisyf<-function(x){
print("BOO!");
sin(x);
}
noisyf(7)
deprintize(noisyf)(7)
deprintize(noisyf)->silentf;silentf(7)
Si necesita absolutamente el efecto secundario de imprimir en sus propias funciones, ¿por qué no hacerlo una opción?
print.and.return <- function(..., verbose=TRUE) {
if (verbose)
print("foo")
return("bar")
}
> print.and.return()
[1] "foo"
[1] "bar"
> print.and.return(verbose=FALSE)
[1] "bar"
>
?capture.output
Sé que podría estar resucitando esta publicación, pero alguien más podría encontrarla tal como lo hice. Estaba interesado en el mismo comportamiento en una de mis funciones y me encontré con la "invisibilidad":
Tiene el mismo uso de return()
pero simplemente no imprime el valor devuelto:
invisible(variable)
Por lo tanto, para el ejemplo dado por @ayman:
print.and.return2 <- function() {
message("foo")
invisible("bar")
}
Aclamaciones