我正在开发的程序包中具有以下依赖项链:
trajectory
)中定义的类(simmer
)。plot.trajectory
),它也使用S3方法,该方法在程序包B(simmer.plot
)中定义。get_mon
函数)的替代品,因此我收到关于原始功能将被替换。如何使用/导入S3方法而最好不通过roxygen2
导入其余的程序包B?
roxygen2
文档suggests the following:
如果要向S3泛型添加新方法,请使用@importFrom pkg泛型导入。
在我的示例中,该名称为@importFrom simmer.plot plot
,但这将返回一条警告,提示plot
未导出simmer.plot
。如果我首先使用@importFrom graphics plot
导入通用,则会发生同样的事情。
答案 0 :(得分:2)
使用(请参见this):
#' @rawNamespace import(simmer, except=c(get_mon_arrivals, get_mon_resources, get_mon_attributes))
#' @import simmer.plot
因为您确实需要使用simmer.plot
中的重载函数才能使那里的plot方法起作用。等效但较短的版本:
#' @rawNamespace import(simmer, except=getNamespaceExports("simmer.plot"))
#' @import simmer.plot
答案 1 :(得分:2)
IñakiÚcar提到@rawNamespace
标签使我使用this answer中提到的getNamespaceExports
函数得出了一个不导入软件包B导出函数的版本:< / p>
#' @rawNamespace import(packageB, except = getNamespaceExports("packageB"))
@rawNamespace
中的roxygen2
标记将原始代码插入NAMESPACE文件。 getNamespaceExports
返回名称空间中所有导出函数的名称:这可以是尚未附加的程序包。
对于我的具体示例,我可以这样写:
#' @import simmer
#' @rawNamespace import(simmer.plot, except = getNamespaceExports("simmer.plot"))
将这些行放在NAMESPACE中:
import(simmer)
import(simmer.plot, except = getNamespaceExports("simmer.plot"))