Bir komutun çıktısını bastırmaya çalışıyorum (bu durumda, applyişlev).
Bunu kullanmadan yapmak mümkün mü sink()? Aşağıda açıklanan çözümü buldum, ancak mümkünse bunu tek satırda yapmak istiyorum.
Bir komutun çıktısını bastırmaya çalışıyorum (bu durumda, applyişlev).
Bunu kullanmadan yapmak mümkün mü sink()? Aşağıda açıklanan çözümü buldum, ancak mümkünse bunu tek satırda yapmak istiyorum.
capture.output. Veya *_plyplyr paketinden kullanın .
lapplyçıktıyı yazdırmadan gibi bir uygulama işlevini gerçekten yürütmeye çalışıyorsanız , o zaman plyrpaketinden 'l_ply' muhtemelen en uygun seçimdir.
Yanıtlar:
Bunu neden yapmadan yapmak istediğiniz açık değil sink, ancak invisible()işlevdeki herhangi bir komutu kaydırabilirsiniz ve çıktıyı bastırır. Örneğin:
1:10 # prints output
invisible(1:10) # hides it
Aksi takdirde, her şeyi bir satırda noktalı virgül ve parantez ile birleştirebilirsiniz:
{ sink("/dev/null"); ....; sink(); }
invisible()sadece bir ifadenin baskısını bastırır, tek satırlık değildir sink().
applysorusuna gereğince,: invisible(apply(matrix(1:10), 1, as.numeric)).
{ sink("/dev/null"); ....; sink(); }kesinlikle tercih ediyorum capture.output, hem capture.outputetkin bir (yukarıdaki şekilde olduğu gibi lavabo çağırır kaynağında bir göz, artı bazı güzel şeyler etrafında) sadece daha çok, aynen yukarıda yapar.
idwWindows altında işlev üzerinde çalışmaz. En iyi çözümün kullanmak olduğunu düşünüyorumsink
capture.output()İşlevi kullanın . Bir kereye mahsus gibi çalışır sink()ve aksine invisible(), mesajları yazdırmaktan daha fazlasını bastırabilir. Dosya bağımsız değişkenini /dev/nullUNIX veya NULWindows'ta olarak ayarlayın. Örneğin, Dirk'in notunu düşünürsek:
> invisible(cat("Hi\n"))
Hi
> capture.output( cat("Hi\n"), file='NUL')
>
capture.output(x <- log(2))ve daha sonra xdeğerine sahip log(2)...
Aşağıdaki işlev tam olarak istediğiniz şeyi yapmalıdır:
hush=function(code){
sink("NUL") # use /dev/null in UNIX
tmp = code
sink()
return(tmp)
}
Örneğin, buradaki işlevle:
foo=function(){
print("BAR!")
return(42)
}
koşma
x = hush(foo())
42'yi x'e atayacak, ancak "BAR!" STDOUT'a
Unix OS'de "NUL" u "/ dev / null" ile değiştirmeniz gerekeceğini unutmayın.
R yalnızca atanmamış ifadelerin çıktısını otomatik olarak yazdırır, bu nedenle sonucunu applybir değişkene atarsanız yazdırılmaz.
print()veya cat()içlerine sahiptir.
RMarkdown için geçerli bir çözüm arayan birinin buraya gelmesi durumunda, bu tüm çıktıları bastıracaktır:
```{r error=FALSE, warning=FALSE, message=FALSE}
invisible({capture.output({
# Your code goes here
2 * 2
# etc
# etc
})})
```
Kod çalışır, ancak çıkış olacak değil HTML belgesine basılacak
Cevaba Hadley'in yorumunu yapmak (daha iyi görünür kılmayı umuyoruz). plyrPaket kullanımı ile baskı yapmadan uygulama ailesinin kullanılması mümkündür.
x <- 1:2
lapply(x, function(x) x + 1)
#> [[1]]
#> [1] 2
#>
#> [[2]]
#> [1] 3
plyr::l_ply(x, function(x) x + 1)
2020-05-19 tarihinde reprex paketi tarafından oluşturuldu (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))
satırın sonunda veya sonraki satırda NULL olmadan çıktı üretir
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