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

标签 r r-package roxygen2 r-s3

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

  • 我的包使用包 A ( trajectory ) 中定义的类 ( simmer )。
  • 它还为该类 ( plot.trajectory ) 使用 S3 方法,该方法在包 B ( simmer.plot ) 中定义。
  • 我可以整体导入包 A,但不能整体导入包 B,因为它包含对包 A 中定义的其他函数(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/

    相关文章:

    r - 在 R 中解决任务调度或装箱优化

    r - 如何在 R 中创建带有拟合曲线的 3D 条形图

    r - 有没有办法合并行?

    r - S4 错误 : methods can be defined, 但泛型函数是隐式的,无法更改

    r - 是否可以使用 roxygen2 使用非 ASCII 字符编写包文档?

    r - 在 R 文档中包含 Iverson Bracket

    r - 使用 roxygen2 自动记录 S4 泛型的所有方法

    r - ggplot2:将 stat_smooth 回归线扩展到绘图区域的整个 x 范围

    r - 哪个是存储 R 包小插图中使用的图像的正确文件夹?

    R rgl 包崩溃 Rstudio