Estou tentando suprimir a saída de um comando (neste caso, a apply
função).
É possível fazer isso sem usar sink()
? Encontrei a solução descrita abaixo, mas gostaria de fazer isso em uma linha, se possível.
Estou tentando suprimir a saída de um comando (neste caso, a apply
função).
É possível fazer isso sem usar sink()
? Encontrei a solução descrita abaixo, mas gostaria de fazer isso em uma linha, se possível.
capture.output
. Ou use *_ply
do pacote plyr.
lapply
, sem imprimir a saída, então 'l_ply' de seu plyr
pacote é provavelmente a escolha mais apropriada.
Respostas:
Não está claro por que você deseja fazer isso sem sink
, mas você pode agrupar quaisquer comandos na invisible()
função e isso suprimirá a saída. Por exemplo:
1:10 # prints output
invisible(1:10) # hides it
Caso contrário, você sempre pode combinar as coisas em uma linha com um ponto e vírgula e parênteses:
{ sink("/dev/null"); ....; sink(); }
invisible()
apenas suprime a impressão de uma expressão, não é uma linha sink()
única.
apply
, de acordo com a pergunta: invisible(apply(matrix(1:10), 1, as.numeric))
.
{ sink("/dev/null"); ....; sink(); }
eu definitivamente preferir capture.output
, como capture.output
efetivamente faz exatamente acima, apenas muito melhor (dê uma olhada na fonte, ele chama de sink como acima, além de algumas coisas legais em torno dele).
idw
função no Windows. Acho que a melhor solução é usarsink
Use a capture.output()
função. Funciona de forma muito semelhante a uma única sink()
e invisible()
, ao contrário , pode suprimir mais do que apenas imprimir mensagens. Defina o argumento do arquivo como /dev/null
no UNIX ou NUL
no Windows. Por exemplo, considerando a nota de Dirk:
> invisible(cat("Hi\n"))
Hi
> capture.output( cat("Hi\n"), file='NUL')
>
capture.output(x <- log(2))
e depois x
tem o valor de log(2)
...
A função a seguir deve fazer exatamente o que você deseja:
hush=function(code){
sink("NUL") # use /dev/null in UNIX
tmp = code
sink()
return(tmp)
}
Por exemplo, com a função aqui:
foo=function(){
print("BAR!")
return(42)
}
corrida
x = hush(foo())
Irá atribuir 42 ax, mas não imprimirá "BAR!" para STDOUT
Observe que em um sistema operacional UNIX você precisará substituir "NUL" por "/ dev / null"
R apenas imprime automaticamente a saída de expressões não atribuídas, então apenas atribua o resultado de a apply
uma variável e ele não será impresso.
print()
ou cat()
que vai para a tela, não para uma atribuição.
No caso de alguém chegar aqui em busca de uma solução aplicável ao RMarkdown, isso irá suprimir todos os resultados:
```{r error=FALSE, warning=FALSE, message=FALSE}
invisible({capture.output({
# Your code goes here
2 * 2
# etc
# etc
})})
```
O código será executado, mas a saída não será impressa no documento HTML
Fazendo o comentário de Hadley a uma resposta (espero torná-lo mais visível). O uso da família de aplicação sem impressão é possível com o uso da plyr
embalagem
x <- 1:2
lapply(x, function(x) x + 1)
#> [[1]]
#> [1] 2
#>
#> [[2]]
#> [1] 3
plyr::l_ply(x, function(x) x + 1)
Criado em 2020-05-19 pelo pacote 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))
produz saída sem NULL no final da linha ou na próxima linha
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