带有S4类的自定义程序包的R错误:类“classname”在程序包“pkgname”中有一个锁定的定义

时间:2017-10-19 16:25:33

标签: r class oop packages s4

我创建了一个包含以下功能的包:

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类,以便来自其他地方的数据可用于实例化该类的新对象?提前谢谢。

1 个答案:

答案 0 :(得分:0)

这是因为make_LD每次调用时都会尝试重新定义类"LongitudinalData"(这就是setClass所做的。)因此,当用户调用它时,R拒绝重新定义class,因为它会与已经存在的定义冲突,如果有的话。

最有可能的是,您希望将setClass语句作为包中的独立名称。然后,您的函数make_LD只需调用new并返回结果。