我创建了一个包含以下功能的包:
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类,以便来自其他地方的数据可用于实例化该类的新对象?提前谢谢。
答案 0 :(得分:0)
这是因为make_LD
每次调用时都会尝试重新定义类"LongitudinalData"
(这就是setClass
所做的。)因此,当用户调用它时,R拒绝重新定义class,因为它会与已经存在的定义冲突,如果有的话。
最有可能的是,您希望将setClass
语句作为包中的独立名称。然后,您的函数make_LD
只需调用new
并返回结果。