[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