Estoy buscando suprimir la salida de un comando (en este caso, la apply
función).
¿Es posible hacer esto sin usar sink()
? Encontré la solución descrita a continuación, pero me gustaría hacer esto en una línea si es posible.
Estoy buscando suprimir la salida de un comando (en este caso, la apply
función).
¿Es posible hacer esto sin usar sink()
? Encontré la solución descrita a continuación, pero me gustaría hacer esto en una línea si es posible.
capture.output
. O utilícelo*_ply
del paquete plyr.lapply
, sin imprimir la salida, 'l_ply` de suplyr
paquete es probablemente la opción más adecuada.Respuestas:
No está claro por qué quiere hacer esto sin
sink
, pero puede ajustar cualquier comando en lainvisible()
función y suprimirá la salida. Por ejemplo:1:10 # prints output invisible(1:10) # hides it
De lo contrario, siempre puede combinar las cosas en una línea con un punto y coma y paréntesis:
{ sink("/dev/null"); ....; sink(); }
fuente
invisible()
solo suprime la impresión de una expresión, no es unasink()
línea.apply
, según la pregunta:invisible(apply(matrix(1:10), 1, as.numeric))
.{ sink("/dev/null"); ....; sink(); }
definitivamente preferiríacapture.output
, como locapture.output
hace exactamente arriba, simplemente mucho mejor (eche un vistazo a la fuente, llama al sumidero como en la moda anterior, además de algunas cosas agradables a su alrededor).idw
función de Windows. Creo que la mejor solución es usarsink
Usa la
capture.output()
función. Funciona de forma muy parecida a una únicasink()
yinvisible()
, a diferencia de ello, puede suprimir algo más que imprimir mensajes. Establezca el argumento del archivo en/dev/null
en UNIX oNUL
en Windows. Por ejemplo, considerando la nota de Dirk:> invisible(cat("Hi\n")) Hi > capture.output( cat("Hi\n"), file='NUL') >
fuente
capture.output(x <- log(2))
y luegox
tiene el valor delog(2)
...puede usar 'capture.output' como se muestra a continuación. Esto le permite utilizar los datos más tarde:
log <- capture.output({ test <- CensReg.SMN(cc=cc,x=x,y=y, nu=NULL, type="Normal") }) test$betas
fuente
R solo imprime automáticamente la salida de expresiones no asignadas, así que simplemente asigne el resultado
apply
a una variable y no se imprimirá.fuente
print()
ocat()
en ellas que va a la pantalla, no a una asignación.La siguiente función debería hacer exactamente lo que quieres:
hush=function(code){ sink("NUL") # use /dev/null in UNIX tmp = code sink() return(tmp) }
Por ejemplo, con la función aquí:
foo=function(){ print("BAR!") return(42) }
corriendo
Asignará 42 ax pero no imprimirá "BAR!" a STDOUT
Tenga en cuenta que en un sistema operativo UNIX deberá reemplazar "NUL" con "/ dev / null"
fuente
En caso de que alguien llegue aquí buscando una solución aplicable a RMarkdown, esto suprimirá todos los resultados:
El código se ejecutará, pero la salida no se imprimirá en el documento HTML.
fuente
Hacer que el comentario de Hadley sea una respuesta (espero que sea más visible). El uso de la familia de aplicaciones sin imprimir es posible con el uso del
plyr
paquetex <- 1:2 lapply(x, function(x) x + 1) #> [[1]] #> [1] 2 #> #> [[2]] #> [1] 3 plyr::l_ply(x, function(x) x + 1)
Creado el 2020-05-19 por el paquete reprex (v0.3.0)
fuente
invisible(cat("Dataset: ", dataset, fill = TRUE)) invisible(cat(" Width: " ,width, fill = TRUE)) invisible(cat(" Bin1: " ,bin1interval, fill = TRUE)) invisible(cat(" Bin2: " ,bin2interval, fill = TRUE)) invisible(cat(" Bin3: " ,bin3interval, fill = TRUE))
produce salida sin NULL al final de la línea o en la siguiente línea
Dataset: 17 19 26 29 31 32 34 45 47 51 52 59 60 62 63 Width: 15.33333 Bin1: 17 32.33333 Bin2: 32.33333 47.66667 Bin3: 47.66667 63
fuente