Also you want " for(i in 2:ncol(mydf)) { ..." Your current setup of 1:ncol(mydf)-1 picks columns 0,1,2,...,ncol-1 (missing the last), which is not what you want... Setting i<-2 in the first line was overridden by the call to loop.
Cheers On Thu, Feb 9, 2012 at 2:33 PM, peter dalgaard <pda...@gmail.com> wrote: > > On Feb 9, 2012, at 20:28 , jlpugh wrote: > >> Hey Folks: >> >> New to R and learning as I go, but really, I know just enough to get myself >> into trouble. I've waded through everything up till now, and don't see >> anything in the search that is directly helpful for the POS that I've >> created. >> >> The GOAL: All I want in the world is a program that performs 1-way ANOVA's >> on every column in a data set (taking the first column as the definition of >> the groups) and then spits out ONLY those results that were significant (p >> <= whatever I want), with their respective plots and TukeyHSD results. >> Sounds simple, right? > > Quite likely, this could all be done more elegantly (lapply springs to mind), > and there could be something in there that won't work at all, but to point > out the glaring obvious: If the grouping factor is in column 1, then > shouldn't you have var2~var1 in the aov() call? > >> var1 <- mydf[,1] >> var2 <- mydf[,i] >> fm1 <- aov(var1 ~ var2) >> tky <- TukeyHSD(fm1) > > > and, by the way, you _really_ do not want to go via capture.output to get at > the p value. It is accessible from the summary(fm1) directly. For aov > objects, it's like: > > summary(fm1)[[1]]$"Pr(>F)"[1] > > (for "lm" objects, try anova(fm)$"Pr(>F)"[1]) > >> >> Data: >> >> http://r.789695.n4.nabble.com/file/n4374072/test_text.txt test_text.txt >> >> (see upload) >> >> CODE: ( which occurs after TEST <- read.table("test_text.txt") ) >> >> i <- 2; >> sink (file = "test_output.txt", append = FALSE) >> mydf <- data.frame(TEST) >> for (j in 1:ncol(mydf)-1) { >> var1 <- mydf[,1] >> var2 <- mydf[,i] >> fm1 <- aov(var1 ~ var2) >> tky <- TukeyHSD(fm1) >> otpt <- capture.output(summary(fm1)) >> i <- i+1; >> lines <- as.vector(unlist(strsplit(otpt[2]," ")),mode="list") # gets >> the >> p-value >> if (grepl("[1234567890]",lines[14],perl = TRUE)) { #make sure that >> slot for >> p-value has a number >> number <- as.numeric(lines[14]) # make it numeric for logic >> test >> if (number <= 0.1) { >> cat(otpt, sep = "\n\n") >> cat(tky, sep = "\n\n") >> quartz(boxplot(mydf[,i] ~ mydf[,1])) >> } >> } >> } >> sink() >> >> The ERROR: >> >> Error in TukeyHSD.aov(fm1) : no factors in the fitted model >> In addition: Warning message: >> In replications(paste("~", xx), data = mf) : non-factors ignored: var2 >> >> It works if I leave out " tky <- TukeyHSD(fm1) " and the subsequent cat. >> I've tried doing the Tukey on the mydf[,1].. itself, changing their classes, >> etc. Perhaps the whole approach is flawed. >> >> THANKS! >> >> >> -- >> View this message in context: >> http://r.789695.n4.nabble.com/Tukey-HSD-tp4374072p4374072.html >> Sent from the R help mailing list archive at Nabble.com. >> >> ______________________________________________ >> 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. > > -- > Peter Dalgaard, Professor, > Center for Statistics, Copenhagen Business School > Solbjerg Plads 3, 2000 Frederiksberg, Denmark > Phone: (+45)38153501 > Email: pd....@cbs.dk Priv: pda...@gmail.com > > ______________________________________________ > 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. ______________________________________________ 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.