2017-10-19 50 views
1

j'ai créé un paquet contenant la fonction suivante:erreur R pour package personnalisé avec les classes S4: classe "classname" a une définition bloquée dans le paquet "pkgname"

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 fonctionne très bien dans un espace de travail où il est explicitement défini, mais pas quand j'appelle la fonction ailleurs après avoir chargé le paquet. Quand je fais cela, je reçois l'erreur:

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

Quelqu'un pourrait-il expliquer comment je suis allé sur la définition d'une classe S4 dans le paquet de telle sorte que des données provenant d'autres peuvent être utilisées pour instancier un nouvel objet de cette classe? Merci d'avance.

Répondre

0

Cela se produit parce que make_LD tente de redéfinir la classe "LongitudinalData" chaque fois qu'il est appelé (c'est ce que setClass fait.) Ainsi, lorsque l'utilisateur appelle, R refuse de redéfinir la classe parce qu'il serait en contradiction avec la définition qui existe déjà , si seulement. Il est fort probable que vous souhaitiez avoir l'instruction setClass en tant que solution autonome quelque part dans votre package. Ensuite, votre fonction make_LD appelle simplement new et renvoie le résultat.