Re: [Rd] Data table in C

From: Byron Ellis <byron.ellis_at_gmail.com>
Date: Fri 17 Nov 2006 - 21:04:48 GMT

Data frames are column, not row oriented so you actually want your list-o-lists to be

$type
[1] "BID" "BID" "BID" $price
[1] 0.6178 0.6717 0.6717

$volume
[1] 3e+06 3e+06 17200000

so you'd create a VECSXP of length 3 and then three data vectors (also of length 3 in this case). One STRSXP and two REALSXPs and assign them into the VECSXP. Also a names attribute for the VECSXP. There are some other attributes you have to set (the class attribute among other things) to build a real data frame, but the general structure is like that.

On 11/17/06, Tom McCallum <tom.mccallum@levelelimited.com> wrote:
> After getting one list done, I am now struggling to form a data frame in C.
>
> I tried to do a list of lists which gives me :
>
> $<NA>
> $<NA>[[1]]
> [1] "BID"
>
> $<NA>[[2]]
> [1] 0.6718
>
> $<NA>[[3]]
> [1] 3e+06
>
>
> $<NA>
> $<NA>[[1]]
> [1] "BID"
>
> $<NA>[[2]]
> [1] 0.6717
>
> $<NA>[[3]]
> [1] 5e+06
>
>
> $<NA>
> $<NA>[[1]]
> [1] "BID"
>
> $<NA>[[2]]
> [1] 0.6717
>
> $<NA>[[3]]
> [1] 17200000
>
>
> and then as.data.frame them in R but this gives me
>
> > print(l);
> X0.type X0.price X0.volume X1.type X1.price X1.volume X2.type X2.price
> 1 BID 0.6723 3e+06 BID 0.6722 5e+06 BID 0.67195
> X2.volume X3.type X3.price X3.volume X4.type X4.price X4.volume X5.type
> 1 19400000 BID 0.6723 3e+06 BID 0.6722 5e+06 BID
> X5.price X5.volume X6.type X6.price X6.volume X7.type X7.price X7.volume
> 1 0.6723 3e+06 BID 0.6723 3e+06 BID 0.67195 19400000
> X8.type X8.price X8.volume X9.type X9.price X9.volume X10.type X10.price
> 1 BID 0.6723 3e+06 BID 0.67215 1e+07 BID 0.6723
> X10.volume X11.type X11.price X11.volume X12.type X12.price X12.volume
> 1 5e+06 BID 0.67215 1e+07 BID 0.6723 3e+06
>
> and so on.
>
> Is the only way in C to do this or is there a better way of creating a 2
> dimensional data frame with names columns? I could not find a
> "data.frame" object so I assume one has to use lists but I can't see how
> to get a 3 column list as the example below shows:
>
> a b d
> 1 1 4 7
> 2 2 5 8
> 3 3 6 9
>
>
> Tom
>
> --
> Dr. Thomas McCallum
> Systems Architect,
> Level E Limited
> ETTC, The King's Buildings
> Mayfield Road,
> Edinburgh EH9 3JL, UK
> Work +44 (0) 131 472 4813
> Fax: +44 (0) 131 472 4719
> http://www.levelelimited.com
> Email: tom@levelelimited.com
>
> Level E is a limited company incorporated in Scotland. The c...{{dropped}}
>
> ______________________________________________
> R-devel@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>

-- 
Byron Ellis (byron.ellis@gmail.com)
"Oook" -- The Librarian

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Received on Sat Nov 18 08:06:32 2006

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.1.8, at Fri 17 Nov 2006 - 21:30:46 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel. Please read the posting guide before posting to the list.