[R] Why is my data always imported as a list?
William Dunlap
wdunlap at tibco.com
Mon Jun 11 20:25:40 CEST 2012
A data.frame is a list with some extra attributes. When you
subset a data.frame as
z["Column"]
you get a one-column data.frame (which boxplot rejects because
it want numeric or character data). Subsetting it as either
z[, "Column"]
or
z[["Column"]]
gives you the column itself, not a data.frame containing one column.
> z <- data.frame(One=log(1:10), Two=rep(c("i","ii","iii"),c(3,4,3)))
> str(z["One"])
'data.frame': 10 obs. of 1 variable:
$ One: num 0 0.693 1.099 1.386 1.609 ...
> str(z[, "One"])
num [1:10] 0 0.693 1.099 1.386 1.609 ...
> str(z[["One"]])
num [1:10] 0 0.693 1.099 1.386 1.609 ...
In the particular case of the formula interface to boxplot (and to other
functions), you can avoid having to choose the column-extraction operator
by using the data= argument. The following three examples give the same
result:
boxplot(data=z, One ~ Two)
boxplot(z[["One"]] ~ z[["Two"]])
boxplot(z[, "One"] ~ z[, "Two"])
Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com
> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf
> Of Samantha Sifleet
> Sent: Monday, June 11, 2012 9:29 AM
> To: r-help at r-project.org
> Subject: [R] Why is my data always imported as a list?
>
> Hi,
>
> I am a relatively new to R. So, this is probably a really basic issue that
> I keep hitting.
>
> I read my data into R using the read.csv command:
>
> x = rep("numeric", 3)
> CB_un=read.csv("Corn_Belt_unirr.csv", header=TRUE, colClasses=c("factor",
> x))
>
> # I have clearly told R that I have one factor variable and 3 numeric
> variables in this table.
> #but if I try to do anything with them, I get an error
>
> boxplot(CB_un["Value"]~CB_un["State.Fips"])
>
> Error in model.frame.default(formula = CB_un["Value"] ~
> CB_un["State.Fips"]) :
> invalid type (list) for variable 'CB_un["Value"]'
>
> # Because these variables are all stored as lists.
> #So, I have to unpack them.
>
> CB_unirr_rent<-as.numeric(unlist(CB_un["Value"]))
> CB_unirr_State<-as.factor(unlist(CB_un["State.Fips"]))
>
> #before I can do anything with them
>
> boxplot(CB_unirr_rent~CB_unirr_State)
>
> Is there a reason my data is always imported as lists? Is there a way to
> skip this upacking step?
>
> Thanks,
>
> Sam
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
More information about the R-help
mailing list