Как вызвать прогнозирование для 3 разных алгоритмов из одной и той же пользовательской функции пакета R?

Я работаю над заказным R-пакетом (он приватный, нигде не размещен). В этом пакете у меня есть функция, которая берет модели xgboost, RandomForest (из функции рейнджера) и glmnet и использует их для прогнозирования нового набора данных.

Каждый раз, когда я предсказываю, я использую одну и ту же обобщенную функцию предсказания. Если я не использую пространство имен для функции, R не знает, какую библиотеку использовать для предсказания.

Я получаю ошибку:

Error in UseMethod("predict") : 
  no applicable method for 'predict' applied to an object of class "c('lognet', 'glmnet')" 

Если я загружаю функции вручную, это работает, но я знаю, что загрузка пакетов вручную в библиотеке R является табу.

Я пытался использовать glmnet::glmnet.predict и т. Д., Но это также дает мне ошибки. Каков был бы правильный способ для пространства имен этих функций предсказания, чтобы избежать загрузки библиотек вручную?

0 ответов

Я сам сталкивался с этим иногда, когда, например, это работает:

ranger::predictions(predict(model, data))

но это не при идентичных обстоятельствах:

predict(model, data)

Ваша посылка предположительно Imports необходимая зависимость, но различные методы S3, включая predict.<class>(), никогда не регистрируются для использования, если вы не скажете R использовать их в какой-то момент раньше в вашей программе. Вы можете исправить это, добавивrequireNamespace(<package name>, quietly = TRUE) либо вверху данной функции, либо в .onLoad(). Это заставляет R регистрировать соответствующие методы S3 и т. Д., И вы можете подтвердить это, установив флажокmethods(predict)до и после. Важно отметить, что это верно для неэкспортируемых методов, которые не позволяют roxygen2 декларации как#' @importFrom <package name> <predict.class>.

В моем конкретном примере выше :: заставляет R загружаться ranger наряду с его различными методами S3, включая predict.ranger(), так predict() отправляет просто отлично.

Другие вопросы по тегам