【问题标题】:R error for custom package with S4 classes: class "classname" has a locked definition in package "pkgname"具有 S4 类的自定义包的 R 错误:类“类名”在包“pkgname”中具有锁定定义
【发布时间】:2018-03-31 18:29:04
【问题描述】:

我创建了一个包含以下函数的包:

make_LD <- function(a) {
  setClass("LongitudinalData", slots = list(subject = "numeric", visit = "numeric", room = "character", timepoint = "numeric", value = "numeric"))
  new("LongitudinalData", subject = a$id, visit = a$visit, room = a$room, timepoint = a$timepoint, value = a$value)
}

make_LD 在明确定义的工作空间中工作正常,但在加载包后在其他地方调用该函数时却不行。当我这样做时,我得到了错误:

Error in assignClassDef(Class, classDef, where) : class "LongitudinalData" has a locked definition in pkgname'

有人能解释一下我应该如何在包中定义一个 S4 类,以便可以使用来自其他地方的数据来实例化该类的新对象吗?提前致谢。

【问题讨论】:

    标签: r class oop packages s4


    【解决方案1】:

    发生这种情况是因为make_LD 每次调用时都会尝试重新定义类"LongitudinalData"setClass 就是这样做的。)因此,当用户调用它时,R 拒绝重新定义该类,因为它会与已经存在的定义,如果有的话。

    很可能,您希望将setClass 语句作为独立的语句放在您的包中的某个位置。然后,您的函数 make_LD 只需调用 new 并返回结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-28
      • 2012-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-02
      • 1970-01-01
      相关资源
      最近更新 更多