Uitvoer van een functie onderdrukken

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.

Uitvoer onderdrukken


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/nullop UNIX of NULop 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 applytoe 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 plyrpakket

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)


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

Other episodes