我在R包中定义了三个不同的S4类,其中一个类使用另外两个类。
我看到devtools::load_all()
按字母顺序加载脚本,因此如果一个脚本依赖于另一个按字母顺序排在后面的脚本,可能会出现问题。
- 示例脚本
a.r
:*
setClass("a", slots = c(name = "character"))
- 示例脚本
b.r
*
setClass("b", slots = c(name = "character", a = "a", c = "c"))
- 示例脚本
c.r
:*
setClass("c", slots = c(name = "character"))
当我运行devtools::load_all()
时,出现以下警告:
Warning messages:
1: undefined slot classes in definition of "b": c(class "c")
我不想重命名我的脚本,只是为了根据我希望加载它们的时间按字母顺序排列它们。
我不想在单个脚本中定义这些类,因为我想使代码更加模块化。
如何确保定义依赖类的脚本可以访问其他类:
1.不管这些类所在的脚本的名称是什么?
1.而不诉诸source()
,因为这将从该脚本导入其他不需要的函数、对象、变量。
在python
中,这相对来说是微不足道的,可以使用如下语法:from <relative path to .py file that defines those objects> import <desired objects>
在R
中,我在原地打转,试图完成类似的事情。
1条答案
按热度按时间j5fpnvbx1#
鉴于你的
b.r
宏想要定义class(c)
,我强烈建议你在b.r
宏的顶部显式地包含命令load(c.r)
。否则,当有人试图用load(b.r)
而不是“load.all()”设置一些东西时,无论如何都会失败。总是避免依赖于用户执行一些“额外的”东西。