r - 如何从相同的自定义 R 包函数调用 3 种不同算法的预测?

标签 r r-library

我正在开发一个自定义 R 包(它是私有(private)的,不在任何地方托管)。在这个包中,我有一个函数,它采用 xgboost、RandomForest(来自 ranger 函数)和 glmnet 模型,并使用它们在新数据集上进行预测。

每次我进行预测时,我都会使用相同的广义预测函数。如果我不命名函数,R 不知道要使用哪个库进行预测。

我得到的错误是:

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

如果我手动加载函数,它可以工作,但我知道在 R 库中手动加载包是一个禁忌。

我尝试使用 glmnet::glmnet.predict 等,但这也给了我错误。命名这些预测函数以避免手动加载库的正确方法是什么?

最佳答案

我自己也遇到过这种情况,例如,这有效:

ranger::predictions(predict(model, data))
但这在相同情况下不会:
predict(model, data)
你的包裹大概是Import s 必要的依赖,但各种 S3 方法,包括 predict.<class>() , 永远不会被注册使用,除非你告诉 R 在你的程序早期的某个时刻使用它们。您可以通过添加 requireNamespace(<package name>, quietly = TRUE) 来解决此问题在给定函数的顶部或 .onLoad() 中.这会导致 R 注册适当的 S3 方法等,您可以通过检查 methods(predict) 来确认这一点。之前和之后。重要的是,这对于不允许 roxygen2 声明(如 #' @importFrom <package name> <predict.class>)的非导出方法是正确的。 .
在我上面的特定示例中,:: causes R to load ranger 以及它的各种 S3 方法,包括 predict.ranger() , 所以 predict()派送就好了。

关于r - 如何从相同的自定义 R 包函数调用 3 种不同算法的预测?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52526703/

相关文章:

r - 如何在 R 中将 `foreach` 和 `%dopar%` 与 `R6` 类一起使用?

r - 使用存储的凭据通过 dplyr 连接到 MySQL 数据库

R - (ggplot2 library) - 图例不显示在图表上

r - 在flexdashboard中包含rmarkdown文本(includeMarkdown不起作用)(R)

r - 使用 purrr::map 将多个参数应用于函数

python - Jupyter + rpy2 输出到命令提示符而不是笔记本单元格

r - 障碍模型预测 - 计数与响应