r语言 - 导入包的 S3 方法而不导入其函数



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

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

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

roxygen2文档建议如下:

如果要向 S3 泛型添加新方法,请使用 @importFrom pkg 泛型导入该方法。

对于我的示例,这将是@importFrom simmer.plot plot,但这会返回一条警告,指出plot不是由simmer.plot导出的。如果我先使用@importFrom graphics plot导入泛型,也会发生同样的事情。

Iñaki Úcar 提到@rawNamespace标签,这让我想到了一个不导入包 B 的任何导出函数的版本,使用本回答中提到的getNamespaceExports函数:

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

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

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

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

将以下行放在命名空间中:

import(simmer)
import(simmer.plot, except = getNamespaceExports("simmer.plot"))

使用(见这里(:

#' @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

相关内容

  • 没有找到相关文章

最新更新