我正在开发的包中有以下依赖链:
trajectory
) 中定义的类 ( simmer
)。 plot.trajectory
) 使用 S3 方法,该方法在包 B ( simmer.plot
) 中定义。 get_mon
函数)的替换,因此我收到有关原始函数被替换的不需要的警告。 如何在不导入包 B 的其余部分的情况下使用/导入 S3 方法,最好通过
roxygen2
?roxygen2
文档 suggests the following :If you want to add a new method to an S3 generic, import it with @importFrom pkg generic.
对于我的示例,这将是
@importFrom simmer.plot plot
,但这会返回警告 plot
不是由 simmer.plot
导出的.如果我先使用 @importFrom graphics plot
导入泛型,也会发生同样的事情。 .
最佳答案
Iñaki Úcar 提到了 @rawNamespace
标签使我使用 getNamespaceExports
制定了一个不导入包 B 的任何导出函数的版本。 this answer中提到的功能:
#' @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"))
关于r - 导入包的 S3 方法而不导入其函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59647444/