Ho un po 'di esperienza con gli oggetti S4
e i relativi slot, quindi so come accedere a slot e sotto-slot specifici. Quello che mi piacerebbe imparare è come "de-slotify" un oggetto nel modo in cui unlist
separa un elenco S3
.
Il mio obiettivo immediato è quello di avere una controparte S4 a uno dei miei giocattoli che restituisce il numero di elementi di un oggetto:Esiste un S4 equivalente a unlist()?
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)
}
(senza fiera ridere il mio codice :-)). Spero di non dover scrivere una routine di ricorsione che estrae gli slot uno alla volta per convertirli.
Modifica: so che object.size
restituirà il bytecount; non quello che sto cercando qui.
Si potrebbe desiderare di avere uno sguardo a 'str()' ('utils ::: str .default' really) - entrambi i risultati quando applicato a oggetti S4 e il codice che utilizza per percorrere tutti gli slot di un oggetto S4. –