Je cherche à supprimer la sortie d' une commande (dans ce cas, la apply
fonction).
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 apply
fonction).
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 à*_ply
partir du package plyr.lapply
, sans imprimer la sortie, alors «l_ply» de sonplyr
paquet 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 lainvisible()
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(); }
la source
invisible()
ne supprime que l'impression d'une expression, ce n'est pas une lignesink()
unique.apply
, selon la question:invisible(apply(matrix(1:10), 1, as.numeric))
.{ sink("/dev/null"); ....; sink(); }
préférercapture.output
, commecapture.output
le fait effectivement exactement ci-dessus, juste beaucoup mieux (regardez la source, elle appelle évier comme ci-dessus, plus quelques trucs sympas autour d'elle).idw
fonction sous Windows. Je pense que la meilleure solution est d'utilisersink
Utilisez la
capture.output()
fonction. Cela fonctionne très bien comme un seulsink()
et contrairementinvisible()
, il peut supprimer plus que simplement imprimer des messages. Définissez l'argument de fichier/dev/null
sur UNIX ouNUL
sous Windows. Par exemple, compte tenu de la note de Dirk:> invisible(cat("Hi\n")) Hi > capture.output( cat("Hi\n"), file='NUL') >
la source
capture.output(x <- log(2))
et a ensuitex
la valeur delog(2)
...vous pouvez utiliser 'capture.output' comme ci-dessous. Cela vous permet d'utiliser les données plus tard:
log <- capture.output({ test <- CensReg.SMN(cc=cc,x=x,y=y, nu=NULL, type="Normal") }) test$betas
la source
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é.la source
print()
oucat()
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
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"
la source
Si quelqu'un arrive ici à la recherche d'une solution applicable à RMarkdown, cela supprimera toutes les sorties:
Le code s'exécutera, mais la sortie ne sera pas imprimée dans le document HTML
la source
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
plyr
packagex <- 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)
la source
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
la source