Hi,

I have fixed this.  I replaced the "=" with "<<-".  I do not think this 
is the most elegant way, so if anyone else has any better ideas they 
would be very much apperitiaded.

New lines:

   formulaGenotype <<- test_variable~Genotype + Gender
   formulaNull <<- test_variable~Gender

Cheers,

Hugh

On 01/29/2012 07:46 PM, Hugh Morgan wrote:
> Hi,
>
> I have what I suppose is the same problem as this.  I am using the 
> linear mixed model function lme, and this does not seems to take the 
> attribute "model=TRUE" at the end of the function.
>
> Is there a more general way of solving this problem?
> Is my description of the problem below correct (from my understanding 
> of cran.r-project.org/doc/contrib/Fox-Companion/appendix-scope.pdf)?
>
> Using the test script:
>
> calculate_mixed_model_p <- function() {
>   dataObj=read.csv('dataMini.csv', header=TRUE, sep=",", dec=".")
>   colnames(dataObj)
>   attach(dataObj)
>   library(nlme)
>
>   formulaGenotype = test_variable~Genotype + Gender
>   formulaNull = test_variable~Gender
>   finalModelGenotype = lme(formulaGenotype, random=~1|Date, dataObj, 
> na.action="na.omit", method="ML", keep.data = TRUE)
>   finalModelNull = lme(formulaNull, random=~1|Date, dataObj, 
> na.action="na.omit", method="ML")
>   anovaModel = anova (finalModelGenotype,finalModelNull)
>   print(anovaModel)
> }
>
> Fails with:
>
> Error in eval(expr, envir, enclos) : object 'formulaGenotype' not found
>
> I THINK function lme(...) constructs an object (finalModelGenotype) 
> that has as part of it a link (pointer?) to object formulaGenotype.  
> During construction this is in the function scope as it was passed to 
> it.  When finalModelGenotype is later passed to function anova(...) 
> the link is still there but as the lme(...) scope no longer exists the 
> link is now broken.
>
> Any help greatly apperitiated,
>
> Hugh
>
> PS, I tried to make this script self contained, and generated the data 
> object with the following lines.  It looks identical when you print 
> it, but the lme function fails with error at [2].  If someone was to 
> tell me what I am doing wrong I may be able to post easier scripts.
>
> [1]
>   
> dataObj=data.frame(test_variable=c("23.0","20.2","23.8","25.6","24.6","22.7","27.7","27.5","23.5","22.8","22.3","20.9","26.6","23.8","24.5","26.8","23.2","29.9","23.3","22.5","22.2","27.2","28.1","24.5","22.7","20.7","26.2","27.1","22.0","22.2","26.7","28.5","22.2","22.1","25.3","21.7","29.3"),
>     
> Gender=c("Female","Female","Male","Male","Male","Female","Male","Male","Female","Female","Female","Female","Male","Male","Male","Male","Female","Male","Female","Female","Female","Male","Male","Male","Female","Female","Male","Male","Female","Female","Male","Male","Female","Female","Female","Female","Male"),
>     
> Genotype=c("10028","10028","10028","10028","10028","10028","10028","10028","10028","10028","10028","10028","10028","10028","10028","10028","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"),
>     
> Assay.Date=c("01/07/2009","01/07/2009","01/07/2009","01/07/2009","01/07/2009","01/07/2009","01/07/2009","01/07/2009","01/07/2009","07/07/2010","07/07/2010","07/07/2010","01/07/2009","07/07/2010","07/07/2010","07/07/2010","02/06/2010","02/06/2010","02/06/2010","02/06/2010","02/06/2010","02/06/2010","02/06/2010","02/06/2010","17/06/2010","17/06/2010","17/06/2010","17/06/2010","16/06/2010","16/06/2010","16/06/2010","16/06/2010","22/06/2010","22/06/2010","22/06/2010","22/06/2010","22/06/2010"),
>     
> Weight=c("9.9","9.5","9.9","10","9.9","9.8","10.2","10.4","9.9","9.8","9.9","9.5","9.8","9.5","9.8","9.9","9.5","10","9.8","9.5","9.7","10","10.2","9.9","9.9","9.5","10","10","9.8","9.9","10.2","10.1","9.8","9.9","10.2","9.8","10")
>   )
>
> [2]
>
> Error in `rownames<-`(`*tmp*`, value = c("1", "2", "3", "4", "5", "6",  :
>   attempt to set rownames on object with no dimensions
> In addition:Warning message:
> In Ops.factor(y[revOrder], Fitted) : - not meaningful for factors
>
>
>
> On 01/25/2012 01:25 PM, Terry Therneau wrote:
>>> I want use survfit() and basehaz() inside a function, but it doesn't
>>> work. Could you take a look at this problem. Thanks for your help.
>> Your problem has to do with environments, and these lines
>>
>>     fmla<- as.formula("Surv(time, event) ~ Z1 + Z2")
>>     BaseFun<- function(x){
>>          start.coxph<- coxph(x, phmmd)
>>           ...
>>          survfit(start.coxph)
>>          }
>>     Basefun(fmla)
>>
>> The survfit routine needs to reconstruct the model matrix, and by
>> default in R this is done in the context where the model formula was
>> first defined.  Unfortunately this is outside the function, leading to
>> problems -- your argument "x" is is unknown in the outer envirnoment.
>> The solution is to add "model=TRUE" to the coxph call so that the model
>> frame is saved and survfit doesn't have to do reconstruction.
>>
>> If you think this should work as is, well, so do I.  I spent a lot of
>> time on this issue a few months ago and finally threw in the towel.  The
>> interaction of environments with model.frame and model.matrix is subtle
>> and far from obvious.  (Just to be clear: I didn't say "broken".  Each
>> aspect of the process has well thought out reasons.)  The standard
>> modeling functions lm, glm, etc changed their defaults from model=F to
>> model=T at some point.  This costs some space&  memory, but coxph may
>> need to do the same.
>>
>> Terry T
>>
>> ______________________________________________
>> 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.


	[[alternative HTML version deleted]]

