【发布时间】:2014-03-14 17:56:45
【问题描述】:
我正在编写一个 S4 类并且正在研究访问器方法。我想写一个方法,如果你给它一个或多个我的 S4 对象将返回一个包含某个插槽内容的向量。这是一些示例代码
setClass(Class="TestClass",slots=c(Type="character")) ### Creates Class
setGeneric(name="getType",function(object){standardGeneric("getType")} )
setMethod(f="getType", signature="TestClass", ### accessor for "TYPE
function(object){object@Type})
现在我制作了两个对象:
FOO<-new("TestClass",Type="A")
BAR<-new("TestClass",Type="B")
使用getType(FOO) 按计划工作。但是,当我这样做时:
Both<-c(FOO,BAR)
getType (Both)
而不是得到"A","B"我当然得到:
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function ‘getType’
for signature ‘"list"’
这并不奇怪。我知道我可以写一个类似的函数
getType2<-function(object){sapply(object, FUN=getType)}
那会给我我想要的。但是,有没有办法在访问器函数本身中做到这一点?我可以矢量化@ 吗?
【问题讨论】: