On 2012-04-16 10:43, Michael Friendly wrote:
[Env:  R 2.14.2 / Win Xp]

In the script below, I want to select some variables from
rrcov::OsloTransect, delete cases with
any missing data, and subset the data frame Oslo to remove cases for two
levels of the
factor litho that occur with low frequency.

The checks I run on my new data frame Oslo look OK, but I when I try to
fit a multivariate
linear model with lm(), I am getting an error: variable lengths differ
(found for 'litho').
How can I fix this?

  >  data(OsloTransect, package="rrcov")
  >  # keep a subset of variables&  rename some variables
  >  Oslo<-OsloTransect[c("X.ID", "XCOO", "YCOO", "X.FOREST",
"X.WEATHER", "X.FLITHO", "ALT")]
  >  colnames(Oslo)<- c("site", "XC", "YC", "forest", "weather", "litho",
"altitude")
  >  Oslo<- cbind(Oslo, OsloTransect[,c("Cu", "Fe", "K", "Mg", "Mn", "P",
"Zn")])
  >  # make site a factor
  >  Oslo[,"site"]<- factor(Oslo[,"site"])
  >
  >  # log transform the chemical elements
  >  Oslo[,8:14]<- log(Oslo[,8:14])
  >
  >  # delete cases with missing data
  >  Oslo<- Oslo[complete.cases(Oslo),]
  >  nrow(Oslo)
[1] 350
  >
  >  # delete low frequency litho=="GNEID_O" | "MICSH"
  >  Oslo<- subset(Oslo, !litho %in% c("GNEID_O", "MICSH"), drop=TRUE)
  >  nrow(Oslo)
[1] 332
  >  Oslo<- droplevels(Oslo)
  >  table(Oslo$litho)

   CAMSED GNEIS_O GNEIS_R    MAGM
       98      89      32     113
  >  nrow(Oslo)
[1] 332
  >  mod1<- lm(cbind("Cu", "Fe", "K", "Mg", "Mn", "P", "Zn") ~ litho +
forest + weather, data=Oslo)
Error in model.frame.default(formula = cbind("Cu", "Fe", "K", "Mg",
"Mn",  :
    variable lengths differ (found for 'litho')
  >


Michael,
Unless I'm missing something, don't you just have to drop the quotes
in your cbind()?

Peter Ehlers

______________________________________________
R-help@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.

Reply via email to