4

我正在开发的包中有以下依赖链:

  • 我的包使用trajectory包 A ( ) 中定义的类 ( simmer)。
  • 它还为该类 ( plot.trajectory) 使用 S3 方法,该方法在包 B ( simmer.plot) 中定义。
  • 我可以将包 A 作为一个整体导入,但我不能将包 B 作为一个整体导入,因为它包含对包 A 中定义的其他函数(get_mon函数)的替换,所以我收到关于原始函数被替换的不需要的警告。

如何在不导入包 B 的其余部分的情况下使用/导入 S3 方法,最好是通过roxygen2

roxygen2文档建议以下内容

如果您想向 S3 泛型添加新方法,请使用 @importFrom pkg generic 将其导入。

对于我的示例,这将是,但这会返回一个不是由 导出@importFrom simmer.plot plot的警告。如果我先导入泛型,使用.plotsimmer.plot@importFrom graphics plot

4

2 回答 2

2

使用(见此

#' @rawNamespace import(simmer, except=c(get_mon_arrivals, get_mon_resources, get_mon_attributes))
#' @import simmer.plot

因为您确实需要使用重载函数,simmer.plot以便那里的绘图方法可以工作。等效但较短的版本:

#' @rawNamespace import(simmer, except=getNamespaceExports("simmer.plot"))
#' @import simmer.plot
于 2020-01-09T14:53:22.703 回答
2

Iñaki Úcar 对标签的提及使我使用此答案中提到@rawNamespace的函数制定了一个不导入包 B 的任何导出函数的版本:getNamespaceExports

#' @rawNamespace import(packageB, except = getNamespaceExports("packageB"))

中的@rawNamespace标签roxygen2将原始代码插入到 NAMESPACE 文件中。getNamespaceExports返回命名空间中所有导出函数的名称:这可以是您尚未附加的包。

对于我的具体示例,我可以这样写:

#' @import simmer
#' @rawNamespace import(simmer.plot, except = getNamespaceExports("simmer.plot"))

它将这些行放在命名空间中:

import(simmer)
import(simmer.plot, except = getNamespaceExports("simmer.plot"))
于 2020-01-10T15:15:47.670 回答