我有一些使用S4
对象及其slot的经验,因此我知道如何访问特定的slot和子slot。我想学习的是如何像unlist
将S3
列表拆开一样“去除”对象中的slot。
我目前的目标是创建一个S4版本的玩具程序,用于返回对象的元素数量:
lssize<-function(items){
if (any(sapply(sapply(items,get),typeof)=='closure')){
warning('Closures in list, will ignore.')
items<-items[(sapply(sapply(bar,get),typeof)=='closure')!=TRUE]
}
sizes<-sapply(sapply(sapply(sapply(items,get,simplify=F), unlist,simplify=F), as.vector,simplify=F), length)
return(sizes)
}
(不要嘲笑我的代码:-))。我希望不必编写递归例程来逐个提取插槽以进行转换。
编辑:我知道object.size
会返回字节数; 这里不是我想要的东西。
编辑:我知道
object.size
会返回字节数;这不是我在这里追求的。
str()
(实际上是utils:::str.default
) - 无论是应用于S4对象时的结果,还是它用于遍历所有S4对象插槽的代码。 - Josh O'Brien