Судя по этой теме в списке рассылки:
http://tolstoy.newcastle.edu.au/R/e2/devel/06/11/1013.html
... Джон Чамберс думал об этом в 2006 году. И все же мы не можем помещать объекты S4 в столбцы кадров данных. Мы также не можем помещать сложные классы S3 в столбцы кадров данных.
Существуют и другие структуры табличных данных, которые могут это сделать - data.table возможно:
require(data.table)
setClass("geezer", representation(name="character", age="numeric"))
tom=new("geezer",name="Tom",age=20)
dick=new("geezer",name="Dick",age=23)
harry=new("geezer",name="Harry",age=25)
gt = data.table(geezers=c(tom,dick,harry),weapons=c("Gun","Gun","Knife"))
gt
geezers weapons
1: Gun
2: Gun
3: Knife
Семантика data.table немного отличается от data.frame и не ожидает, что сможет подключить data.table к любому коду, использующему data.frame, и ожидать, что он будет работать (например, я подозреваю lm
и glm
пошатнутся). Но, кажется, авторы data.table допускают составные классы в столбцах ...