Я хочу подавить вывод одной команды (в данном случае 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)
...
Следующая функция должна делать именно то, что вы хотите:
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»
R автоматически выводит только неназначенные выражения, поэтому просто присвойте результат apply
переменной, и он не будет напечатан.
print()
или, cat()
которые переходят к экрану, а не к назначению.
Если кто-то прибывает сюда в поисках решения, применимого к 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 пакетом REPEX (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