Я хочу придушити вихід однієї команди (у цьому випадку 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/nullUNIX або NULWindows. Наприклад, розглядаючи примітку Дірка:
> 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