gpt4 book ai didi

r - 如何在不加载包的情况下从另一个包扩展 S3 方法

转载 作者:行者123 更新时间:2023-12-03 20:42:14 25 4
gpt4 key购买 nike

我正在开发一个具有以下功能的包 forecast.myclass .我希望该函数与 forecast 很好地配合使用包裹。 IE。当forecast包加载代码forecast(object)应调用 forecast.myclass从我的包裹。

因为我只需要 forecast 的通用定义来自包裹forecast ,并且我不使用包 forecast 中的任何其他功能我不愿意将它包含在依赖项中。所以我用以下方式在我的包中定义泛型:

##'
##' @export
forecast <- function(object,...) UseMethod("forecast")

##' @rdname forecast.midas_r
##' @method forecast midas_r
##' @export
forecast.midas_r <- function(object,newdata=NULL,method=c("static","dynamic"),insample=get_estimation_sample(object),...) {

现在,当包 forecast 时,一切都按预期工作未加载。但是当我加载包时 forecast ,然后 forecast.midas_r不调用,当做 forecast(object)哪里 object属于 midas_r .我应该如何解决这个问题?

最佳答案

我不确定是否有一个简单的解决方案。正如其他人所说,它可能最容易使用 Depends解决这个问题,而不是重新定义一个泛型方法。

这是一个对我有用的简单示例。它与您的解决方案大致相同,但声明 @export意味着您不需要手动更新 NAMESPACE文件。

##' @name mean
##' @export mean.newClass
##'
##' @method mean newClass
##'
##' @title mean for \code{newClass} object
##' @param x A \code{newClass} object
##' @param ... Additional arguments
##'
mean.newClass <- function(x, ...){
stopifnot(class(x)=="newClass")
return(42)
}

然后 package.skeleton("newPkg") .放置文件 mean.R目录下有上述内容 /R的包。

确保您在下面的目录 1 中,然后
roxygenize("newPkg", roxygen.dir="newPkg", copy.package=F, unlink.target=F)

现在
library(devtools)
dev_mode(on=TRUE) ### don't want to have to uninstall the package later
install_local("newPkg")
library(newPkg)
x <- c(1,2)
class(x) <- "newClass"
stopifnot(mean(x)==42)
stopifnot(mean(unclass(x))==1.5)

我意识到 meanbase 中的函数但是我已经测试了这个以修改其他地方的通用函数以给它们一个新方法,所以它也应该扩展到你更一般的情况。

关于r - 如何在不加载包的情况下从另一个包扩展 S3 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18513607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com