[R] How to convert S4 class slots into data.frame or how to assign variables of type 'Date'

Ronny Wölbing ronny.woelbing at me.com
Thu Nov 20 11:32:29 CET 2008


I created a class (S4) with some slots like value, date, description  
(it's actually a financial transaction class). Now  I need a method to  
convert this class forth and back into a single row data.frame, where  
every slots represents a column. This method looks at the moment like  

 > setMethod("as.data.frame", "Transaction",
		function(x, row.names = NULL,  optional = FALSE, ...){
						slotnames <- slotNames(x)
						slotlist <- data.frame(rbind(1:length(slotnames)))
						names(slotlist) <- slotnames
						for(i in slotnames) {
					                slotlist[1, i] <- slot(x,  i)

This method doesn't require predetermined slotnames or types, which is  
important to me. The method works quite good but the problem is that I  
have slots of type 'Date' and this method doesn't preserve the type  
but converts it to numeric.

A couple of tests showed that this is actually a problem of assigning  
values to data.frame column. Something like this:

 > slotlist$DayOfTransaction <- slot(Transaction, DateOfTransaction)

would preserve the type of DateOfTransaction as 'Date'.

But I don't see a way to use this assigning scheme in my method  
without using the actual slotnames and giving up a lot of flexibility.

Do you have any suggestions? Is there maybe even a simple way to  
convert S4 slots into data.frames?

Thanks in advance

More information about the R-help mailing list