Estoy buscando suprimir la salida de un comando (en este caso, la applyfunció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 applyfunció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 *_plydel paquete plyr.
lapply, sin imprimir la salida, 'l_ply` de su plyrpaquete 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 la invisible()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(); }
invisible()solo suprime la impresión de una expresión, no es una sink()línea.
apply, según la pregunta: invisible(apply(matrix(1:10), 1, as.numeric)).
{ sink("/dev/null"); ....; sink(); }definitivamente preferiría capture.output, como lo capture.outputhace 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).
idwfunción de Windows. Creo que la mejor solución es usarsink
Usa la capture.output()función. Funciona de forma muy parecida a una única sink()y invisible(), a diferencia de ello, puede suprimir algo más que imprimir mensajes. Establezca el argumento del archivo en /dev/nullen UNIX o NULen Windows. Por ejemplo, considerando la nota de Dirk:
> invisible(cat("Hi\n"))
Hi
> capture.output( cat("Hi\n"), file='NUL')
>
capture.output(x <- log(2))y luego xtiene el valor de log(2)...
R solo imprime automáticamente la salida de expresiones no asignadas, así que simplemente asigne el resultado applya una variable y no se imprimirá.
print()o cat()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
x = hush(foo())
Asignará 42 ax pero no imprimirá "BAR!" a STDOUT
Tenga en cuenta que en un sistema operativo UNIX deberá reemplazar "NUL" con "/ dev / null"
En caso de que alguien llegue aquí buscando una solución aplicable a RMarkdown, esto suprimirá todos los resultados:
```{r error=FALSE, warning=FALSE, message=FALSE}
invisible({capture.output({
# Your code goes here
2 * 2
# etc
# etc
})})
```
El código se ejecutará, pero la salida no se imprimirá en el documento HTML.
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 plyrpaquete
x <- 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)
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