1) add1 does this for you, more efficiently! 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. 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. 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.
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 _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._