Hi
I'm trying to wrap predict.lm within a function, but I'm having problems
passing arguments into it in this way.
Basically I want to create a lm object, then pass it into the predict.lm
function and be able to tell predict.lm which variable I want to predict
for, by passing the variable name as an argument of the wrapper
function. This variable will always be a factor with 3 levels, so I want
to predict the response within each of these levels evaluated at the
mean value of all other variables in the model (as indicated below by
replicating the means for the data 3 times in the data.frame part of
predict.lm).
The simplest of all my attempts looks like this:
my.fun <- function(formula, mydata, predict_variable){
my.lm <- lm(formula=formula, data=mydata)
my.predict <-
predict.lm(my.lm,(data.frame(predict_variable=y,rbind(mean(mydata,
na.rm=T),mean(mydata, na.rm=T), mean(mydata,na.rm=T)),
row.names=as.numeric(names(table(mydata$predict_variable))))))
}
outside of the function, the following commands do exactly what I want:
my.lm <- lm(LDL ~ AGE + SEX + factor(SNP1_add), data=testdata)
predict.lm(my.lm,(data.frame(SNP1_add=y,rbind(mean(testdata,
na.rm=T),mean(testdata, na.rm=T), mean(testdata,na.rm=T)),
row.names=as.numeric(names(table(testdata$SNP1_add))))))
where SNP1_add is the variable to predict for, but when I run
my.fun(formula=LDL ~ AGE + SEX + factor(SNP1_add), mydata=testdata,
predict_variable="SNP1_add")
I get: Error in sort(unique.default(x), na.last = TRUE) :
'x' must be atomic
I figure I should be using eval() or substitute() somewhere to but none
of my attempts have been successful. Any help would be appreciated.
--
Pamela A McCaskie
BSc(Mathematical Sciences)(Hons)
Laboratory for Genetic Epidemiology
Western Australian Institute for Medical Research
University of Western Australia
Ground Floor, B Block
Hospital Avenue, Nedlands
Western Australia 6009
AUSTRALIA
Email: pmccask at cyllene.uwa.edu.au
Phone: +61 (0)8 9346 1612
Mob: +61 (0)417 926 607
This e-mail and all attachments contain information which is confidential and/or
subject to copyright. It may not be used or disclosed unless authorised by the
sender.