On Jun 14, 2012, at 3:20 AM, Rui Barradas wrote:
Hello,
Now the output of str() says 'dat' is a list not a data.frame. That's
why R is complaining about dimensions (lack of, in this case).
Try
dat2 <- data.frame(do.call(cbind, dat), stringsAsFactors=FALSE)
The construction data.frame(cbind(.)) should be severely deprecated. It
coerces all the columns to be of the same class and removes all the
attributes except names. This is what happens to a POSIXlt "vector":
data.frame(do.call(cbind, list(a=1:10, b=as.POSIXlt(ISOdate(2001, 1:10,
1))) ),stringsAsFactors=FALSE )
a b
1 1 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
2 2 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
3 3 12, 12, 12, 12, 12, 12, 12, 12, 12, 12
4 4 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
5 5 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
6 6 101, 101, 101, 101, 101, 101, 101, 101, 101, 101
7 7 1, 4, 4, 0, 2, 5, 0, 3, 6, 1
8 8 0, 31, 59, 90, 120, 151, 181, 212, 243, 273
9 9 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
10 10 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
Use instead:
dat2 <- data.frame( dat, stringsAsFactors=FALSE)
The data.frame function will do the cbinding actions but will preserve
column attributes such as POSIXlt. The process may convert to POSIXct
from POSIXlt.
> structure(data.frame(list(a=1:10, b=as.POSIXlt(ISOdate(2001, 1:10,
1)))) )
a b
1 1 2001-01-01 12:00:00
2 2 2001-02-01 12:00:00
3 3 2001-03-01 12:00:00
4 4 2001-04-01 12:00:00
5 5 2001-05-01 12:00:00
6 6 2001-06-01 12:00:00
7 7 2001-07-01 12:00:00
8 8 2001-08-01 12:00:00
9 9 2001-09-01 12:00:00
10 10 2001-10-01 12:00:00
> str(data.frame(list(a=1:10, b=as.POSIXlt(ISOdate(2001, 1:10, 1)))) )
'data.frame': 10 obs. of 2 variables:
$ a: int 1 2 3 4 5 6 7 8 9 10
$ b: POSIXct, format: "2001-01-01 12:00:00" "2001-02-01 12:00:00"
"2001-03-01 12:00:00" ...