Как подавить предупреждения из статистики ::: регуляризовать.значения? - PullRequest
1 голос
/ 03 июля 2019

В более новых версиях R (у меня 3.6 и ранее было 3.2), функция stats::regularize .values ​​была изменена, чтобы иметь значение по умолчанию warn.collapsing как TRUE.Эта функция используется в splinefun и некоторых других интерполяционных функциях в R. В модели микросимуляции я использую splinefun для сглаживания большого количества (n> 100 000) точек данных в форме (x, f (x)).Здесь x - моделируемый вектор скалярных чисел с положительными значениями, а f (x) - некоторая функция (x).При таком большом n часто возникают некоторые репликации псевдослучайно сгенерированных значений (т. Е. Не все значения x уникальны).Насколько я понимаю, splinefun избавляется от связей в значениях х.Для меня это не проблема, но из-за нового значения по умолчанию я получаю предупреждающее сообщение, которое печатается каждый раз (ниже)связей)): сворачивается в уникальные значения 'x' "

Есть ли способ изменить значение по умолчанию для аргумента warn.collapsing функции stats::regularize.values обратно на F?Или я могу как-то подавить это предупреждение?Это важно, потому что он встроен в длинный код микросимуляции, и когда я обновляю его, я часто сталкиваюсь с ошибками.Поэтому я не могу просто игнорировать предупреждающие сообщения.

Я пытался использовать функцию формализации.Мне удалось напечатать аргументы по умолчанию stats::regularize.values, но когда я попытался присвоить новые значения с помощью функции alist, он сказал, что нет объекта 'stats'.

1 Ответ

0 голосов
/ 03 июля 2019

Ссылка эта статья

Оберните ваш вызов regularize.values следующим образом:

withCallingHandlers(regularize.values(x), warning = function(w){
  if (grepl("collapsing to unique 'x' values", w$message))
   invokeRestart("muffleWarning")
})

Рабочий пример (адаптировано из приведенной выше ссылки для вызова функции):

f1 <- function(){
  x <- 1:10
  x + 1:3
}

f1()

# if we just call f1() we get a warning
Warning in x + 1:3 :
  longer object length is not a multiple of shorter object length
 [1]  2  4  6  5  7  9  8 10 12 11


withCallingHandlers(f1(), warning=function(w){invokeRestart("muffleWarning")})
 [1]  2  4  6  5  7  9  8 10 12 11
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...