Лучший способ подавить, но сохранить сообщения, создаваемые пакетными функциями, с помощью print () - PullRequest
0 голосов
/ 22 февраля 2019

Некоторые встраиваемые функции отправляют предупреждающие сообщения, не используя warning(), но print().
Они являются причиной проблем, особенно в циклическом методе, из-за отправки мне большого количества (но одинаковых) сообщений.
Я хочу получать выходные данные о пакетных функциях без каких-либо сообщений, но сохраняю их.

Я могу сделать это, но я чувствую, что это грязно и хочу избегать использования <<-.Есть ли что-то хорошее?
Любая помощь будет принята с благодарностью.Ниже мой метод и желаемые результаты:

library(dplyr); library(purrr)

data <- tibble(col1 = letters[1:5], col2 = letters[6:10], col3 = letters[11:15])

f <- function(x){
  if(is.numeric(x)) {
    paste0(x, collapse = "")
  } else {
    print("Warning_by_print")
    paste0(x, collapse = "")
  }
}


result <- c()
captured_messages <- map(data, ~ capture.output(result <<- c(result, f(.x))))

# They are my desired output.
result; captured_unique_messages
# [1] "abcde" "fghij" "klmno"
# $col1
# [1] "[1] \"Warning_by_print\""
# ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...