Ik wil de uitvoer van ééncommando onderdrukken (in dit geval de functie apply
).
Is het mogelijk om dit te doen zonder sink()
te gebruiken? Ik heb de hieronder beschreven oplossing gevonden, maar zou dit indien mogelijk in één regel willen doen.
Antwoord 1, autoriteit 100%
Het is niet duidelijk waarom je dit wilt doen zonder sink
, maar je kunt alle commando’s in de functie invisible()
plaatsen en de uitvoer wordt onderdrukt. Bijvoorbeeld:
1:10 # prints output
invisible(1:10) # hides it
Anders kun je altijd dingen in één regel combineren met een puntkomma en haakjes:
{ sink("/dev/null"); ....; sink(); }
Antwoord 2, autoriteit 62%
Gebruik de functie capture.output()
. Het werkt heel erg als een eenmalige sink()
en in tegenstelling tot invisible()
, kan het meer onderdrukken dan alleen het afdrukken van berichten. Stel het bestandsargument in op /dev/null
op UNIX of NUL
op Windows. Bijvoorbeeld, rekening houdend met de notitie van Dirk:
> invisible(cat("Hi\n"))
Hi
> capture.output( cat("Hi\n"), file='NUL')
>
Antwoord 3, autoriteit 18%
De volgende functie zou precies moeten doen wat u wilt:
hush=function(code){
sink("NUL") # use /dev/null in UNIX
tmp = code
sink()
return(tmp)
}
Bijvoorbeeld met de functie hier:
foo=function(){
print("BAR!")
return(42)
}
hardlopen
x = hush(foo())
Hiermee wordt 42 toegewezen aan x, maar “BAR!” wordt niet afgedrukt. naar STDOUT
Merk op dat u in een UNIX-besturingssysteem “NUL” moet vervangen door “/dev/null”
Antwoord 4, autoriteit 11%
R drukt alleen automatisch de uitvoer van niet-toegewezen uitdrukkingen af, dus wijs het resultaat van de apply
toe aan een variabele en het wordt niet afgedrukt.
Antwoord 5, autoriteit 11%
u kunt ‘capture.output’ gebruiken zoals hieronder. Hierdoor kunt u de gegevens later gebruiken:
log <- capture.output({
test <- CensReg.SMN(cc=cc,x=x,y=y, nu=NULL, type="Normal")
})
test$betas
Antwoord 6, autoriteit 4%
In het geval dat iemand hier aankomt op zoek naar een oplossing die van toepassing is op RMarkdown, zal dit alle uitvoer onderdrukken:
```{r error=FALSE, warning=FALSE, message=FALSE}
invisible({capture.output({
# Your code goes here
2 * 2
# etc
# etc
})})
```
De code wordt uitgevoerd, maar de uitvoer wordt nietafgedrukt naar het HTML-document
Antwoord 7
Hadley’s commentaar op een antwoord maken (hoop het beter zichtbaar te maken). Gebruik van Apply Family zonder printen is mogelijk met gebruik van het plyr
pakket
x <- 1:2
lapply(x, function(x) x + 1)
#> [[1]]
#> [1] 2
#>
#> [[2]]
#> [1] 3
plyr::l_ply(x, function(x) x + 1)
Gemaakt op 2020-05-19 door het reprex-pakket(v0.3.0) sup>
Antwoord 8
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))
produceert uitvoer zonder NULL aan het einde van de regel of op de volgende regel
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