Я хочу придушити вихід однієї команди (у цьому випадку apply
функції).
Чи можна це зробити без використання sink()
? Я знайшов описане рішення нижче, але хотів би зробити це в один рядок, якщо це можливо.
Я хочу придушити вихід однієї команди (у цьому випадку apply
функції).
Чи можна це зробити без використання sink()
? Я знайшов описане рішення нижче, але хотів би зробити це в один рядок, якщо це можливо.
capture.output
. Або скористайтеся *_ply
пакетом plyr.
lapply
, без друку вихідних даних, тоді "l_ply" з його plyr
пакету, мабуть, найбільш підходящий вибір.
Відповіді:
Незрозуміло, чому ви хочете зробити це без sink
, але ви можете обернути будь-які команди у invisible()
функції, і це придушить вихід. Наприклад:
1:10 # prints output
invisible(1:10) # hides it
В іншому випадку ви завжди можете об’єднати речі в один рядок із крапкою з комою та дужками:
{ sink("/dev/null"); ....; sink(); }
invisible()
лише придушує друк виразу, він не є sink()
однорядковим.
apply
, відповідно з питанням: invisible(apply(matrix(1:10), 1, as.numeric))
.
{ sink("/dev/null"); ....; sink(); }
я напевно віддав би перевагу capture.output
, як capture.output
це робиться саме вище, просто набагато краще (подивіться на джерело, воно називає раковину, як описано вище, плюс кілька приємних речей навколо нього).
idw
функцією під Windows. Я думаю, що найкращим рішенням є використанняsink
Використовуйте capture.output()
функцію. Це працює як одноразово, sink()
і на відміну від цього invisible()
, воно може придушити не лише друк повідомлень. Встановіть для аргументу файлу значення /dev/null
UNIX або NUL
Windows. Наприклад, розглядаючи примітку Дірка:
> invisible(cat("Hi\n"))
Hi
> capture.output( cat("Hi\n"), file='NUL')
>
capture.output(x <- log(2))
і згодом x
має значення log(2)
...
R лише автоматично друкує висновок неприсвоєних виразів, тому просто призначте результат apply
змінної змінній, і вона не надрукується .
print()
або, cat()
що переходить на екран, а не на призначення.
Наступна функція повинна робити те, що ви хочете:
hush=function(code){
sink("NUL") # use /dev/null in UNIX
tmp = code
sink()
return(tmp)
}
Наприклад, із функцією тут:
foo=function(){
print("BAR!")
return(42)
}
біг
x = hush(foo())
Присвоїть 42 x, але не надрукує "BAR!" до STDOUT
Зверніть увагу, що в ОС UNIX вам потрібно буде замінити "NUL" на "/ dev / null"
У випадку, якщо хтось приїде сюди і шукає рішення, яке стосується RMarkdown, це вимкне весь вихід:
```{r error=FALSE, warning=FALSE, message=FALSE}
invisible({capture.output({
# Your code goes here
2 * 2
# etc
# etc
})})
```
Код буде запущений, але вихідні дані не будуть надруковані в документі HTML
Висловлення коментаря Хедлі до відповіді (сподіваюся зробити його краще видимим). Використання сімейства apply без друку можливо з використанням plyr
упаковки
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 пакетом 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))
видає вихід без NULL в кінці рядка або в наступному рядку
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