[R] for loop, error in model frame.default ... variable lengths differ

peter dalgaard pdalgd at gmail.com
Mon May 21 11:00:23 CEST 2012


On May 21, 2012, at 10:25 , Petr PIKAL wrote:

> Hi
> 
> You did not provide data but I can see some problems in your code. See 
> inline.
>> 
>> I'm failing to get a for loop working.  I'm sure it's something simple, 
> and I
>> have found some posts relating to it, but I'm just not understanding why
>> this isn't working. 
>> 
>> I have a data frame and would like to loop through specific column 
> names,
>> using aggregate() within a for loop.  There are NA's scattered 
> throughout
>> the data frame and I'm thinking it has something to do with that, but I
>> haven't been able to fix it.
>> 
>> vars <- colnames(df)[c(10,12,16,18,20,21,24:29,45)]
>> for(i in 1:length(vars)) {
> 
> So i is actually values from 1 to length of vars variable.
> 
>>    aggregate(colnames(df)[i] ~ x1 + x2 + x3, df, mean,
> 
> and you select variables from df[,1] to df[, length(vars)], which is 
> probably not what you want.
> What is x1-x3? are they variables in df?
> 
>> na.action=na.exclude)
> 
> for mean the correct statement is na.rm=TRUE
> 
>>    }
>> 
>> I get this error: 
>> Error in model.frame.default(formula = colnames(df)[i] ~ x1 + x2 +   : 
>>  variable lengths differ (found for 'x1')
> 
> Maybe x1 has different length as df. What length(x1) and dim(df) tells 
> you?
> 

colnames(df)[i] is a character vector of length 1. This doesn't work any better than

> aggregate(colnames(airquality)[1] ~ Month, airquality, mean, na.rm=T)
Error in model.frame.default(formula = colnames(airquality[1]) ~ Month,  : 
  variable lengths differ (found for 'Month')

What the poster probably wanted was something in the vein of

> nm <- colnames(airquality)[1]
> ff <- formula(bquote(.(as.name(nm))~Month))
> aggregate(ff, airquality, mean, na.rm=T)
  Month    Ozone
1     5 23.61538
2     6 29.44444
3     7 59.11538
4     8 59.96154
5     9 31.44828




> Regards
> Petr
> 
>> 
>> There are probably much better ways to do this, and I would be happy to 
> get
>> suggestions, but mostly I would like to know why the code isn't working.
>> 
>> Thanks-
>> Peter
>> 
>> --
>> View this message in context: http://r.789695.n4.nabble.com/for-loop-
>> error-in-model-frame-default-variable-lengths-differ-tp4630698.html
>> Sent from the R help mailing list archive at Nabble.com.
>> 
>> ______________________________________________
>> 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.
> 
> ______________________________________________
> 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.

-- 
Peter Dalgaard, Professor
Center for Statistics, Copenhagen Business School
Solbjerg Plads 3, 2000 Frederiksberg, Denmark
Phone: (+45)38153501
Email: pd.mes at cbs.dk  Priv: PDalgd at gmail.com



More information about the R-help mailing list