gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 00:09:45 24 4
gpt4 key购买 nike

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

  • 我的包使用包 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/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com