【发布时间】:2014-03-20 22:37:29
【问题描述】:
我正在编写我的第一个 R 包,并试图找出将值分配给 S4 对象中的插槽的最佳方法,请记住,最终用户不必大惊小怪正在使用的 S4 类结构。以下哪个最好?
-
直接使用
object@MySlot <- value访问槽:我了解这种不良做法(例如,this Q&A)。
-
使用
slot(object, "MySlot") <- value:R 帮助说在获取值时不进行检查,但在设置时进行检查(假设
check尚未设置为FALSE)。这对我来说听起来很合理,并且让我觉得这是一种很好的方法,因为我不必按照下面的方式编写自己的 get/set 方法。 -
对
setReplaceMethod()使用自定义方法:这种方法与上面的第二种方法相比如何?生成必要的 get/set 方法需要做更多的工作,但我可以更明确地确定写入插槽的值对于该插槽类型有效。
setGeneric("MySlot", function(object) { standardGeneric("MySlot") }) setMethod("MySlot", signature = "MyClass", definition = function(object) { return(object@MySlot) }) setGeneric("MySlot<-", function(object, value) { standardGeneric("MySlot<-") }) setReplaceMethod("MySlot", signature="MyClass", function(object, value) { object@MySlot<- value validObject(object) # could add other checks return(object) })
【问题讨论】: