Je cherche à supprimer la sortie d' une commande (dans ce cas, la applyfonction).
Est-il possible de faire cela sans utiliser sink()? J'ai trouvé la solution décrite ci-dessous, mais j'aimerais le faire en une seule ligne si possible.
Je cherche à supprimer la sortie d' une commande (dans ce cas, la applyfonction).
Est-il possible de faire cela sans utiliser sink()? J'ai trouvé la solution décrite ci-dessous, mais j'aimerais le faire en une seule ligne si possible.
capture.output. Ou utilisez à *_plypartir du package plyr.
lapply, sans imprimer la sortie, alors «l_ply» de son plyrpaquet est probablement le choix le plus approprié.
Réponses:
Il n'est pas clair pourquoi vous voulez faire cela sans sink, mais vous pouvez encapsuler toutes les commandes dans la invisible()fonction et cela supprimera la sortie. Par exemple:
1:10 # prints output
invisible(1:10) # hides it
Sinon, vous pouvez toujours combiner les choses en une seule ligne avec un point-virgule et des parenthèses:
{ sink("/dev/null"); ....; sink(); }
invisible()ne supprime que l'impression d'une expression, ce n'est pas une ligne sink()unique.
apply, selon la question: invisible(apply(matrix(1:10), 1, as.numeric)).
{ sink("/dev/null"); ....; sink(); }préférer capture.output, comme capture.outputle fait effectivement exactement ci-dessus, juste beaucoup mieux (regardez la source, elle appelle évier comme ci-dessus, plus quelques trucs sympas autour d'elle).
idwfonction sous Windows. Je pense que la meilleure solution est d'utilisersink
Utilisez la capture.output()fonction. Cela fonctionne très bien comme un seul sink()et contrairement invisible(), il peut supprimer plus que simplement imprimer des messages. Définissez l'argument de fichier /dev/nullsur UNIX ou NULsous Windows. Par exemple, compte tenu de la note de Dirk:
> invisible(cat("Hi\n"))
Hi
> capture.output( cat("Hi\n"), file='NUL')
>
capture.output(x <- log(2))et a ensuite xla valeur de log(2)...
R n'imprime automatiquement que la sortie des expressions non attribuées, donc affectez simplement le résultat de l applyà une variable et il ne sera pas imprimé.
print()ou cat()qui va à l'écran, pas à une affectation.
La fonction suivante doit faire exactement ce que vous voulez:
hush=function(code){
sink("NUL") # use /dev/null in UNIX
tmp = code
sink()
return(tmp)
}
Par exemple avec la fonction ici:
foo=function(){
print("BAR!")
return(42)
}
fonctionnement
x = hush(foo())
Attribuera 42 à x mais n'imprimera pas "BAR!" à STDOUT
Notez que dans un système d'exploitation UNIX, vous devrez remplacer "NUL" par "/ dev / null"
Si quelqu'un arrive ici à la recherche d'une solution applicable à RMarkdown, cela supprimera toutes les sorties:
```{r error=FALSE, warning=FALSE, message=FALSE}
invisible({capture.output({
# Your code goes here
2 * 2
# etc
# etc
})})
```
Le code s'exécutera, mais la sortie ne sera pas imprimée dans le document HTML
Faire le commentaire de Hadley à une réponse (espérer la rendre plus visible). L'utilisation de la famille Apply sans impression est possible avec l'utilisation du plyrpackage
x <- 1:2
lapply(x, function(x) x + 1)
#> [[1]]
#> [1] 2
#>
#> [[2]]
#> [1] 3
plyr::l_ply(x, function(x) x + 1)
Créé le 2020-05-19 par le package 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))
produit une sortie sans NULL à la fin de la ligne ou sur la ligne suivante
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