【发布时间】:2020-04-26 01:59:32
【问题描述】:
我正在开发的包中有以下依赖链:
- 我的包使用包 A (
simmer) 中定义的类 (trajectory)。 - 它还对该类 (
plot.trajectory) 使用 S3 方法,该方法在包 B (simmer.plot) 中定义。 - 我可以将包 A 作为一个整体导入,但我不能将包 B 作为一个整体导入,因为它包含对包 A 中定义的其他函数(
get_mon函数)的替换,因此我收到有关原始函数的不需要的警告被替换。
如何使用/导入 S3 方法而不导入包 B 的其余部分,最好通过roxygen2?
roxygen2 文档suggests the following:
如果您想向 S3 泛型添加新方法,请使用 @importFrom pkg generic 将其导入。
对于我的示例,这将是 @importFrom simmer.plot plot,但这会返回一个警告,即 plot 不是由 simmer.plot 导出的。如果我首先使用@importFrom graphics plot 导入泛型,也会发生同样的事情。
【问题讨论】:
-
如果您从另一个包中导入 generic 并在 your 包中添加 S3 方法,则您引用的内容。你试过
#' @importFrom simmer.plot plot.trajectory吗? -
我有!我收到一个警告,
plot.trajectory不是由simmer.plot导出的,即使我可以看到它在其 GitHub 存储库中:github.com/r-simmer/simmer.plot/blob/master/NAMESPACE -
很公平。这只是我最好的猜测,没有尝试过。我很惊讶你说它不起作用,所以我快速搜索了一下,似乎其他几个人也遇到了同样的问题,而所有任何人都没有弄清楚! stackoverflow.com/q/23112762/8386140 stackoverflow.com/q/42952244/8386140 stackoverflow.com/q/32680169/8386140 如果我没有时间研究它并且您没有得到答案,我可能会为此提供赏金。有趣的问题
-
您是否尝试过使用 simmer.plot:::plot.trajectory() 访问该函数?
-
这并不能解决这个特定问题,因为需要重载函数,正如我在下面的回答中所述,但您只需从包中导入单个有效函数,然后导入 S3 方法注册在那里一应俱全。见stackoverflow.com/a/59667634/6788081