Re: [R] Passing data to aov

2010-08-26 Thread Bryan Hanson
A big thanks David!  Eliminating the env = parent.frame() seems to fix
everything.  I hate it when I'm that close... I included that because from
?as.formula it seemed to be the default, but on re-read, I guess it doesn't
really say that.  In addition, I had included it even though it was the
default as I felt at some point I would have to change it so I wanted it
there as a reminder.  Instead, it led me astray...

Thanks so much! Bryan (coming to you from the R-Inferno today)


On 8/26/10 10:14 AM, "David Winsemius"  wrote:

> 
> On Aug 26, 2010, at 8:47 AM, Bryan Hanson wrote:
> 
>> 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
> 
> Actually I got a different error (also on a Mac. but with a version
> that is two month later than yours and with quite a smaller number of
> packages loaded):
>> hypTestScores(mylist = td2, score.matrix = td1,
> +fac = c("f1", "f2"))
> Error in eval(expr, envir, enclos) : object 'scores' not found
> 
> Which went away if I removed the "env=" argument. My guess is that you
> were telling manova to look further up the lexical tree than it should
> have (or that attach() operation messed up the environment somehow):
> 
>> hypTestScores(mylist = td2, score.matrix = td1,
> +fac = c("f1", "f2"))
>Df  Pillai approx F num Df den Df Pr(>F)
> f1 1 0.31663  0.61777  3  4 0.6392
> f2 1 0.36652  0.77145  3  4 0.5673
> f1:f2  1 0.15687  0.24808  3  4 0.8593
> Residuals  6
> 
>> detach("mylist") # needed if there is an error
> Error in detach("mylist") : invalid 'name' argument
> 
> You might want to do inside the function something like
> 
> res =try(  your function )
> if (res="try-error") {stop() } else{
>  }
> 
>> 
>> 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-1mvtnorm_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
>> 
>> ___

Re: [R] Passing data to aov

2010-08-26 Thread Ivan Calandra
  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"  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

Re: [R] Passing data to aov

2010-08-26 Thread David Winsemius


On Aug 26, 2010, at 8:47 AM, Bryan Hanson wrote:


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


Actually I got a different error (also on a Mac. but with a version  
that is two month later than yours and with quite a smaller number of  
packages loaded):

> hypTestScores(mylist = td2, score.matrix = td1,
+fac = c("f1", "f2"))
Error in eval(expr, envir, enclos) : object 'scores' not found

Which went away if I removed the "env=" argument. My guess is that you  
were telling manova to look further up the lexical tree than it should  
have (or that attach() operation messed up the environment somehow):


> hypTestScores(mylist = td2, score.matrix = td1,
+fac = c("f1", "f2"))
  Df  Pillai approx F num Df den Df Pr(>F)
f1 1 0.31663  0.61777  3  4 0.6392
f2 1 0.36652  0.77145  3  4 0.5673
f1:f2  1 0.15687  0.24808  3  4 0.8593
Residuals  6

> detach("mylist") # needed if there is an error
Error in detach("mylist") : invalid 'name' argument

You might want to do inside the function something like

res =try(  your function )
if (res="try-error") {stop() } else{
}



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-1mvtnorm_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.


David Winsemius, MD
West Hartford, CT

__
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.


Re: [R] Passing data to aov

2010-08-26 Thread Ivan Calandra
  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 understood 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-1mvtnorm_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

[R] Passing data to aov

2010-08-26 Thread Bryan Hanson
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-1mvtnorm_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.