Estou tentando suprimir a saída de um comando (neste caso, a applyfunçã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 applyfunçã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 *_plydo pacote plyr.
lapply, sem imprimir a saída, então 'l_ply' de seu plyrpacote é 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.outputefetivamente 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).
idwfunçã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/nullno UNIX ou NULno 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 xtem 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 applyuma 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 plyrembalagem
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