如何解决使用双冒号::
在从依赖包中使用S3方法时,如何确保在使用双冒号(::)运算符而不进行先前的library()
调用时,如何加载(附加)所有依赖包?
我正在开发使用package3
和package1
的软件包package2
。 package1
定义了S3方法funky
,而package2
定义了其他类型的方法。如果我在自己的软件包funky
中使用了package3
方法,那么即使package3
导入了package1
和package2
,R也找不到相关的S3方法。
军官和mschart项目会出现实际问题,但这是通用的,我在RStudio中使用3个独立的软件包创建了一个可重用的示例
上下文
package1
定义funky(arg)
和funky.character(arg)
。两种方法都导出
package2
定义funky.numeric(arg)
。导入package1
但是,Roxygen不会在NAMESPACE中生成S3method
package3
定义调用hello()
的{{1}}(即应调用数字方法)。导入funky(100)
和package1
(我也尝试过使用depends),
重现问题
package2
生成有关缺少的S3方法的错误
解决方法
package3::hello()
但是,由于该软件包将在我们公司内部使用,所以我不能期望所有人都知道必须首先调用library(package3)
package3::hello()
关于如何确保即使使用双冒号(::)运算符也可以确保所有相关的S3方法可用的任何想法?
非常感谢
乔纳斯
解决方法
您可以添加行
Depends: package2
到包根目录中的DESCRIPTION文件。这样可以确保安装软件包的任何人都将自动安装package2
。它还可以确保每次加载软件包时都加载package2
并在用户的搜索路径上。
另一种可能性是添加
#' @export
funky.numeric <- package2:::funky.numeric
主R文件顶部附近。如果这是一个仅在您自己的公司内部使用的软件包,则应该在实践中起作用,尽管在CRAN上是不允许的。这应该允许用户通过适当的调度来执行package1::funky(x)
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。