【问题标题】:Undefined slot classes in definition?定义中未定义的插槽类?
【发布时间】:2013-08-26 14:24:42
【问题描述】:

我正在尝试构建一个包含自己的 S4 类定义的包。 R 检查有效,但发出以下警告:undefined slot classes in definition mySecond。

我设置为类,而第二类中的一个位置是类myFirstClass。例如:

setClass("myFirst",representation(field_one = "character",
                                  field_two = "list")
         )

setClass("mySecond",representation(a = "character",
                                   b = "myFirst")
         )

注意:虽然 S4 可能更容易处理,但我还是想在这里坚持使用 S4,因为我正在从数据库映射信息,并且在这种情况下更喜欢 S4 更严格的定义。编译确实有效,但我尝试在这里满足 CRAN 的标准并希望摆脱警告。顺便提一句: getClassDef 为这两个类提供了合理的结果。

【问题讨论】:

    标签: r class package s4 cran


    【解决方案1】:

    也许您的类定义在单独的文件中,并且排序规则是 mySecond 在 myFirst 之前定义?请参阅说明中的整理:字段(RShowDoc("R-exts") 的第 1.1.1 节,或遵循一种结构包模型,其中文件 AllClasses.R 包含类定义。

    【讨论】:

    • 感谢 RUtils 功能。光滑!将我的类定义全部放在一个名为 classDefinitions.R 的文件中。感觉我的问题可能与我对这个 zzz.R 文件结构和 .First.Lib 缺乏了解有关?
    • .First.lib 现在在最近的 R 中“已失效”(它在不需要包有 NAMESPACE 时使用;使用 .onLoad 或 .onAttach 代替),但实际上很少有包需要这些钩子——只需在classDefintions.R 中定义你的类,这样myFirst 就在mySecond 之前定义。
    • 谢谢,不知道它已经失效了。真的一定读过一些过时的东西。关于使用 S4 创建包,你有什么推荐的吗?
    • 对不起,我真的没有什么特别推荐的; Brobdingnag 是为此目的创建的一个 R 包,我记得当时我大多同意它,但那是很久以前的事了。 Hadley(不知道为什么他的类将数据表示为低效的“行”,而不是向量)结束了他对包问题的说明。
    • 当我真正需要.onLoad时有什么迹象吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-03
    • 1970-01-01
    • 2021-01-20
    相关资源
    最近更新 更多