Hi! I didn't see the toy data, my bad.
I guess David's solution fixed the problem. Ivan Le 8/26/2010 16:10, Bryan Hanson a écrit : > Hi Ivan, there is toy data given in the original post. > > The object passed to aov is a matrix, it is called scores, and it is passed > via the formula that is created in the sense that the formula specifies > objects in the calling environment. At least that is what is supposed to > happen. > > I've not been able to find an example of manova using a data frame - aov, > yes. I think that is because the response vector in manova must be a > matrix, and you can't put a matrix in a data frame as a separate object. > You could put the columns of the matrix into the data frame, but then it is > not seen as a single entity, it's seen as separate columns, and specifying > this in the formula looks impossible as I understand it. > > But, obviously there is something I don't understand! Thanks, Bryan > > > On 8/26/10 9:50 AM, "Ivan Calandra"<ivan.calan...@uni-hamburg.de> wrote: > >> Hi, >> >> First, some toy data would have helped a lot, and that can explain why >> you got so few answers... >> >> Second, I have maybe some thoughts about it, not sure if this can help. >> >> The error tells you that the data passed to aov is not a matrix. In your >> function, you don't specify explicitly the data object to be used, that >> might be a problem. And that object has to be a matrix, it might not be. >> Maybe something like: >> >> form<- as.formula(paste("pcs", "~", paste(fac, collapse = "*")), >> ... >> if (length(pcs) == 1) out<- aov(formula = form, data=score.matrix) >> >> That would work if I uderstood what you're doing (hum...) and if both "pcs" >> and "fac" are parts of "score.matrix". But I've always done aov from a >> dataframe, which makes sense if you have both numerical variables and >> factors. >> How can you do it from a matrix? Maybe my understanding is limited. >> >> As I said, just some thoughts... >> HTH, >> Ivan >> >> >> Le 8/26/2010 14:47, Bryan Hanson a écrit : >>> Hello Again Gurus and Lurkers: >>> >>> I¹m trying to build a very user-friendly function which does aov without >>> having the user type in a formula (which would be tedious in this case). >>> The idea is to take the response from a PCA score matrix, and the factors >>> from a list. A simple example is the function given below, along with test >>> data and a sample call to the function. >>> >>> I'm certainly having trouble understanding the proper ways to work with >>> formulas and related items, but I think what I do in the function should >>> work (it's built on ideas dug out of the archives). However, when the data >>> is passed to aov (directly or via manova), something in the bowels of aov >>> complains with the following error: >>> >>> Error in model.frame.default(formula = form, drop.unused.levels = TRUE) : >>> object is not a matrix >>> >>> To me, the formula looks legitimate, and the variables in the formula are >>> all in the environment (I think: The way I am doing this is basically that >>> described in ?summary.manova where only a formula is passed, no data >>> argument). Based upon reading the archives, the problem might arise with >>> one of the deparse statements in aov, but I can't resolve it. It might also >>> be one of scoping/environment, but again, this is only an idea. >>> >>> TIA for any assistance. Bryan >>> ************* >>> Bryan Hanson >>> Professor of Chemistry& Biochemistry >>> DePauw University, Greencastle IN USA >>> >>> >>> hypTestScores<- >>> function(mylist, score.matrix, pcs = 1:3, fac = NULL, ...) { >>> >>> scores<- score.matrix[,pcs] >>> # str(scores) # looks correct to me >>> form<- as.formula(paste("scores", "~", paste(fac, collapse = "*")), >>> env = parent.frame()) >>> # str(form) # looks correct to me >>> attach(mylist) >>> if (length(pcs)> 1) out<- manova(formula = form, ...) >>> if (length(pcs) == 1) out<- aov(formula = form, ...) >>> print(summary(out)) >>> detach(mylist) >>> invisible(out) >>> } >>> >>> # test data >>> td1<- matrix(rnorm(50), ncol = 5) # like PCA scores >>> td2<- list( >>> f1 = as.factor(sample(c("A", "B"), 10, replace = TRUE)), >>> f2 = as.factor(sample(c("C", "D"), 10, replace = TRUE))) >>> >>> # test call >>> hypTestScores(mylist = td2, score.matrix = td1, >>> fac = c("f1", "f2")) >>> detach("mylist") # needed if there is an error >>> >>>> sessionInfo() >>> R version 2.11.0 (2010-04-22) >>> x86_64-apple-darwin9.8.0 >>> >>> locale: >>> [1] en_US.UTF-8/en_US.UTF-8/C/C/en_US.UTF-8/en_US.UTF-8 >>> >>> attached base packages: >>> [1] datasets tools grid graphics grDevices utils stats >>> [8] methods base >>> >>> other attached packages: >>> [1] faraway_1.0.4 GGally_0.2 xtable_1.5-6 >>> [4] mvbutils_2.5.1 ggplot2_0.8.8 proto_0.3-8 >>> [7] reshape_0.8.3 ChemoSpec_1.45 R.utils_1.4.0 >>> [10] R.oo_1.7.2 R.methodsS3_1.2.0 rgl_0.91 >>> [13] lattice_0.18-5 mvoutlier_1.4 plyr_1.0.3 >>> [16] RColorBrewer_1.0-2 chemometrics_0.8 som_0.3-5 >>> [19] robustbase_0.5-0-1 rpart_3.1-46 pls_2.1-0 >>> [22] pcaPP_1.8-1 mvtnorm_0.9-9 nnet_7.3-1 >>> [25] mclust_3.4.4 MASS_7.3-5 lars_0.9-7 >>> [28] e1071_1.5-23 class_7.3-2 >>> >>> ______________________________________________ >>> 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. >>> > > -- Ivan CALANDRA PhD Student University of Hamburg Biozentrum Grindel und Zoologisches Museum Abt. Säugetiere Martin-Luther-King-Platz 3 D-20146 Hamburg, GERMANY +49(0)40 42838 6231 ivan.calan...@uni-hamburg.de ********** http://www.for771.uni-bonn.de http://webapp5.rrz.uni-hamburg.de/mammals/eng/mitarbeiter.php [[alternative HTML version deleted]]
______________________________________________ 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.