Hi again, There is a slight error there, it should have been "marker2" at the fourth line: all.pairs <- combn2(5:40) marker1 <- names(qtl)[all.pairs[, 1]] marker2 <- names(qtl)[all.pairs[, 2]] myfun <- function(idx) { summary(aov(qtl$CPP ~ qtl[,idx[1]] * qtl[,idx[2]]))[[1]]$"Pr(>F)"[3]) } p.interaction <- apply(all.pairs, 1, myfun)
Actually, you don't need "as.matrix" there, just cbind all your vectors to obtain the final dataframe: finally <- as.data.frame(cbind(marker1, marker2, p.interaction)) Adrian On Monday 17 July 2006 18:40, Adrian DUSA wrote: > Hi Kevin, > > Regarding your first question, try this: > > library(combinat) > all.pairs <- combn2(5:40) > marker1 <- as.matrix(names(qtl)[all.pairs[, 1]]) > marker1 <- as.matrix(names(qtl)[all.pairs[, 2]]) > myfun <- function(idx) { > summary(aov(qtl$CPP ~ qtl[,idx[1]] * qtl[,idx[2]]))[[1]]$"Pr(>F)"[3]) > } > p.interaction <- as.matrix(apply(all.pairs, 1, myfun) > > HTH, > Adrian > > On Monday 17 July 2006 05:18, Kevin J Emerson wrote: > > Hello R-users! > > > > I have a style question. I know that for loops are somewhat frowned upon > > in R, and I was trying to figure out a nice way to do something without > > using loops, but figured that i could get it done quickly using them. I > > am now looking to see what kind of tricks I can use to make this code a > > bit more aesthetically appealing to other R users (and learn something > > about R along the way...). > > > > Here's the problem. I have a data.frame with 4 columns of dependent > > variables and then ~35 columns of predictor variables (factors) [for > > those interested, it is a qtl problem, where the predictors are genotypes > > at DNA markers and the dependent variable is a biological trait]. I want > > to go through all pairwise combinations of predictor variables and > > perform an anova with two predictors and their interaction on a given > > dependent variable. I then want to store the p.value of the interaction > > term, along with the predictor variable information. So I want to end up > > with a dataframe at the end with the two variable names and the > > interaction p value in each row, for all pairwise combinations of > > predictors. I used the following code: > > > > # qtl is the original data.frame, and my dependent var in this case is > > # qtl$CPP. > > > > marker1 <- NULL > > marker2 <- NULL > > p.interaction <- NULL > > for ( i in 5:40) { # cols 5 - 41 are the predictor factors > > for (j in (i+1):41) { > > marker1 <- rbind(marker1,names(qtl)[i]) > > marker2 <- rbind(marker2,names(qtl)[j]) > > tmp2 <- summary(aov(tmp$CPP ~ tmp[,i] * tmp[,j]))[[1]] > > p.interaction <- rbind(p.interaction, tmp2$"Pr(>F)"[3]) > > } > > } > > > > I have two questions: > > (1) is there a nicer way to do this without having to invoke for loops? > > (2) my other dependent variables are categorical in nature. I need > > basically the same information - I am looking for information regarding > > the interaction of predictors on a categorical variable. Any ideas on > > what tests to use? (I am new to analysis of all-categorical data). > > > > Thanks in advance! > > Kevin > > > > -------------------------------------- > > -------------------------------------- > > Kevin Emerson > > Center for Ecology and Evolutionary Biology > > 1210 University of Oregon > > Eugene, OR 97403 > > USA > > [EMAIL PROTECTED] -- Adrian DUSA Romanian Social Data Archive 1, Schitu Magureanu Bd 050025 Bucharest sector 5 Romania Tel./Fax: +40 21 3126618 \ +40 21 3120210 / int.101 ______________________________________________ R-help@stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html