[R] Hope fo help - functions, fits and for cycles

Marketa Pavlikova Marketa.Pavlikova at euromise.cz
Fri Jun 7 12:27:16 CEST 2002


Thanks for a quick reply!

> 1) add1 does this for you, more efficiently!
Oh, that's right. Unfortunately, it doesn't solve the problem :(

> 2) You are trying to add mydata[,expl[j]]) to a formula.  That makes no
> sense in the context of the formula, and I think you need to define it
> as a variable in your function and then try to add that variable.
I did it as well, no help. It tells me that the newly formed variable 
isn't found. In fact it works normally if outside a function. It think it 
treats mydata[,expl[j]]) as a variable (it gives that name in the fit 
output as well).
 
> 3) update within a function is tricky because of the scope rules.  It
> follows the S scope rules, AFAICS.  A much better idea is to add the
> variable you want either to the data argument or to the environment of the
> formula.

Well the scope rules must be the reason (it does the same in S+). 
But the variable _is_ in the data (it is a part od dataset, put into 
mydata). In fact all I need to do is just to point at that particular 
variable from the data set. Maybe there is another means of doing 
it?
I thought about inluding it into the formula, but I don't know how 
(something like "pasting" together the formulas?)

> BTW, _ is about to be deprecated, and please do not use different
> assignment operators in one piece of code.  If you must use _, put spaces
> around it.  Don't make life unnecessarily hard for your readers.

Oh, in fact the _ part is my colleague's code, I always use <- :) 
Thanks for advice.

> 
> On 7 Jun 2002, Marketa Pavlikova wrote:
> 
> >
> > 	I need a little piece of advice concerning passing data frames
> > into the functions. As I do a lot of similar fits at a time, I'd like to
> > write a small function doing the fits for all relevant variables
> > automatically. However, I usually get error messages of the
> > following kind:
> >
> >   	(I present here a part of a test code).
> >
> > #####################################################
> > # Data set:
> >
> > ID<-c(1,2,3,4,5)
> > gender<-c(1,0,0,1,0)
> > age<-c(25,40,33,50,15)
> > G1<-c(0,0,1,2,0)#it corresponds to
> >     some gene mutations
> > G2<-c(0,1,0,1,1)#I examine the
> >     effect of each of them
> > G3<-c(1,1,1,1,0)#corrected for
> >     "clinical" variables gender and age
> > response<-c(2.1,3.5,6.1,2.0,1.5)
> >
> > dataset<-data.frame(ID,gender,age,G1,G2,G3,response)
> > GG<-c("G1","G2","G3")
> >
> > #   here I construct a function that makes a basic fit,
> >     then updates with each variable from GG vector.
> >
> > trial_function(mydata,formule,expl,distr="binomial")
> > {
> >       n_length(expl)
> >     fit.low_glm(formule, family = distr, data = mydata,
> >     na.action = na.exclude)
> >
> >     for (j in 1:n)
> >     {
> >     fit_update(fit.low,~.+ mydata[,expl[j]])
> >     print(mydata[,expl[j]])
> >     }
> > }
> >
> > result<-
> >     trial(mydata=dataset,formule=response~gender+age,exp
> >     l=GG,distr="gaussian")
> >
> > #   when update is off, no error message is printed and
> >     the function works all right
> > #   if I untag the update, I get the following message
> > ######Error in eval(expr, envir, enclos) : Object
> >     "mydata" not found
> > #   although it passed and foung mydata correctle
> >     beforehand.
> >
> > #   If I break the variable passing standards and define
> >     mydata beforehand by
> >
> > mydata<-dataset
> > result<-
> >     trial(mydata=dataset,formule=response~gender+age,exp
> >     l=GG,distr="gaussian")
> >
> > #   I get
> > ####Error in "[.data.frame"(mydata, , expl[j]) :
> > ####Object "expl" not found
> >
> > ####################################################
> >
> > Hence, it seems to me that there is some problem in passing the
> > dataset into the update function inside a for cycle. When I did the
> > same thing outside the function (with the same for cycle) it worked.
> > Defining the variable outside the update (inside the for cycle) didn't
> > help.
> >
> > Is there any workaround I could use?
> >
> > Thank you very much for your help or connection to someone who
> > could help,
> >
> > 				Marketa Pavlikova
> > 				EuroMISE Center
> >
> >
> > -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
> > r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
> > Send "info", "help", or "[un]subscribe"
> > (in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
> > _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
> >
> 
> -- 
> Brian D. Ripley,                  ripley at stats.ox.ac.uk
> Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
> University of Oxford,             Tel:  +44 1865 272861 (self)
> 1 South Parks Road,                     +44 1865 272860 (secr)
> Oxford OX1 3TG, UK                Fax:  +44 1865 272595
> 


-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._



More information about the R-help mailing list