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 seuplyr
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 nainvisible()
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(); }
fonte
invisible()
apenas suprime a impressão de uma expressão, não é uma linhasink()
única.apply
, de acordo com a pergunta:invisible(apply(matrix(1:10), 1, as.numeric))
.{ sink("/dev/null"); ....; sink(); }
eu definitivamente preferircapture.output
, comocapture.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 únicasink()
einvisible()
, ao contrário , pode suprimir mais do que apenas imprimir mensagens. Defina o argumento do arquivo como/dev/null
no UNIX ouNUL
no Windows. Por exemplo, considerando a nota de Dirk:> invisible(cat("Hi\n")) Hi > capture.output( cat("Hi\n"), file='NUL') >
fonte
capture.output(x <- log(2))
e depoisx
tem o valor delog(2)
...você pode usar 'capture.output' como abaixo. Isso permite que você use os dados mais tarde:
log <- capture.output({ test <- CensReg.SMN(cc=cc,x=x,y=y, nu=NULL, type="Normal") }) test$betas
fonte
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
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"
fonte
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.fonte
print()
oucat()
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:
O código será executado, mas a saída não será impressa no documento HTML
fonte
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
embalagemx <- 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)
fonte
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
fonte