导入包的 S3 方法而不导入其函数
Importing a package's S3 methods without importing its functions
我正在开发的包中有以下依赖链:
- 我的包使用包 A (
simmer
) 中定义的 class (trajectory
)。
- 它还为包 B (
simmer.plot
) 中定义的 class (plot.trajectory
) 使用 S3 方法。
- 我可以将包 A 作为一个整体导入,但我无法将包 B 作为一个整体导入,因为它包含对包 A 中定义的其他函数(
get_mon
函数)的替换,所以我收到不需要的警告关于被替换的原始功能。
如何在不导入包 B 的其余部分的情况下 use/import 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
,但此 returns 警告 plot
未由 simmer.plot
导出。如果我先使用 @importFrom graphics plot
.
导入泛型,也会发生同样的事情
使用(见):
#' @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
Iñaki Úcar 提到的 @rawNamespace
标签促使我使用 this answer 中提到的 getNamespaceExports
函数制定了一个不导入包 B 的任何导出函数的版本:
#' @rawNamespace import(packageB, except = getNamespaceExports("packageB"))
roxygen2
中的 @rawNamespace
标记将原始代码插入到 NAMESPACE 文件中。 getNamespaceExports
returns 命名空间中所有导出函数的名称:这可以是您尚未附加的包。
对于我的具体例子,我可以这样写:
#' @import simmer
#' @rawNamespace import(simmer.plot, except = getNamespaceExports("simmer.plot"))
将这些行放在命名空间中:
import(simmer)
import(simmer.plot, except = getNamespaceExports("simmer.plot"))
我正在开发的包中有以下依赖链:
- 我的包使用包 A (
simmer
) 中定义的 class (trajectory
)。 - 它还为包 B (
simmer.plot
) 中定义的 class (plot.trajectory
) 使用 S3 方法。 - 我可以将包 A 作为一个整体导入,但我无法将包 B 作为一个整体导入,因为它包含对包 A 中定义的其他函数(
get_mon
函数)的替换,所以我收到不需要的警告关于被替换的原始功能。
如何在不导入包 B 的其余部分的情况下 use/import 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
,但此 returns 警告 plot
未由 simmer.plot
导出。如果我先使用 @importFrom graphics plot
.
使用(见
#' @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
Iñaki Úcar 提到的 @rawNamespace
标签促使我使用 this answer 中提到的 getNamespaceExports
函数制定了一个不导入包 B 的任何导出函数的版本:
#' @rawNamespace import(packageB, except = getNamespaceExports("packageB"))
roxygen2
中的 @rawNamespace
标记将原始代码插入到 NAMESPACE 文件中。 getNamespaceExports
returns 命名空间中所有导出函数的名称:这可以是您尚未附加的包。
对于我的具体例子,我可以这样写:
#' @import simmer
#' @rawNamespace import(simmer.plot, except = getNamespaceExports("simmer.plot"))
将这些行放在命名空间中:
import(simmer)
import(simmer.plot, except = getNamespaceExports("simmer.plot"))