在一个r软件包中未找到在另一个软件包中实现的方法

问题描述 投票:0回答:0
cnm

函数中实现了一种通用优化方法,并且应该使用它来创建自定义类的对象并为其实现特定方法。 我正在创建类的对象

npkm
#' @export
npkm <- function(time, censor){
  res <- list(time = time, censor = censor)
  class(res) <- "npkm"
  res
}

然后我需要实现我的班级的一种

gridpoints
方法(还有许多其他必需的方法):

#' @export
gridpoints.npkm = function(x, beta, grid=100) {
  tms <- x$time
  pp = unique(quantile(tms, seq(0, 1, len=grid), type = 1))
  pp
 }

函函数定义为

gridpoints
软件包的内部函数,如下所示:

nspmix

只要我的

gridpoints = function(x, beta, grid) UseMethod("gridpoints")
功能是源自且处于全球环境中,这可以完美地工作。但是我想创建一个使用此优化方法的软件包。一旦我将
gridpoints.npkm
放入一个软件包,甚至导出它,每当我调用优化函数

gridpoints.npkm
(在某个时候会调用
cnm

)时,我会发现一个错误,无法找到我的方法(没有适用于应用于类“ npkm”对象的'GridPoints'的方法)。一旦我将功能放入全球环境,而不是将其放置在软件包名称空间中,一切都很好。

我尝试从
gridpoints
软件包导入
UseMethod("gridpoints")
函数,但我不能,因为它没有导出。我尝试在我的软件包中添加相同的定义,但是
gridpoints
函数自然而然地调用它。
文档的文档具有一些似乎相关的文本,也许可以解释为什么
nspmix
为什么没有在其他软件包中找到我的功能,但是我不太确定它作为解决方案的建议是什么:

namespaces可以注册通用功能的方法。为了支持这一点,在两个范围内,UseMethod和NextMethod搜索方法:在调用通用函数的环境中,以及在定义通用的环境的注册数据库中(通常是命名空间)。因此,需要在通用通用的环境中可用的通用功能的方法,或者必须注册它们。 (在定义通用的环境中是否可见并不重要。)从r 3.5.0开始,在呼叫环境的顶级环境(请参阅TopEnv)搜索注册数据库(但在顶级环境的父母之前)。

,我可以用来做这项工作的魔咒吗?也许声明
nspmix::cnm
通用功能?还是需要在
UseMethod
软件包中完成?

当写下我尝试过的所有内容时,我有了另一个想法,它奏效了:我必须明确声明我的函数是
UseMethod
通用函数的方法(即使它没有从名称空间导出)。
gridpoints

这个将

nspmix

添加到名称空间中。

r generics r-package
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.