
Dear all,

I am not fluent in R and am struggling to 1) apply a lm to a weight-size 
dataset, thus the model has to run separately for each species, each 
year; 2) extract coefs, r-squared, n, etc. The data look like this:

year 	sps 	cm 	w
2009 	50 	16 	22
2009 	50 	17 	42
2009 	50 	18 	45
2009 	51 	15 	45
2009 	51 	16 	53
2009 	51 	17 	73
2010 	50 	15 	22
2010 	50 	16 	41
2010 	50 	16 	21
2010 	50 	17 	36
2010 	51 	15 	43
2010 	51 	16 	67
2010 	51 	17 	79



The following script works for data from a single year, but I don't find 
a way to subset the data by sps AND year and get the function running:

f <- function(data) lm(log(w) ~ log(cm+0.5), data = data)
v <- lapply(split(data, data$sps), f)

and then I can extract the data with this script from Peter Solymos 
(although I do not get the number of points used in the analysis):

myFun <-
function(lm)
{
out <- c(lm$coefficients[1],
     lm$coefficients[2],
     length(lm$run1$model$y),
     summary(lm)$coefficients[2,2],
     pf(summary(lm)$fstatistic[1], summary(lm)$fstatistic[2],
summary(lm)$fstatistic[3], lower.tail = FALSE),
     summary(lm)$r.squared)
names(out) <- c("intercept","slope","n","slope.SE","p.value","r.squared")
return(out)}

results <- list()
for (i in 1:length(v)) results[[names(v)[i]]] <- myFun(v[[i]])
as.data.frame(results)

I have checked the plyr package, but the example that fits my data best 
uses a for loop and I would like to avoid these. I have also tried the 
following (among many other options) without results:

v<-tapply(data$w,list(data$cm,data$year),f)

Error in is.function(FUN) : 'FUN' is missing

Any ideas?

Thanks for your help,

Elena


	[[alternative HTML version deleted]]

