[R] How to pass a variable to a function which use variable name as a parameter

David Winsemius dwinsemius at comcast.net
Tue May 26 19:22:10 CEST 2015


On May 26, 2015, at 8:30 AM, William Dunlap wrote:

> One way to use variable names in functions like Predict() that
> do not evaluate their arguments in the standard way is to use
> do.call() along with as.name().  E.g.,
>  varName<-"age"
>  do.call("Predict", list(fit, as.name(varName), np=4))})
> gives the same result as
>  Predict(fit, age, np=4)
> 

Here's another approach, developed after looking at the code and the help page, where I noticed that the factors argument was given an an alternate route for specifying the variables for evaluation. The requirements for the 'factors' argument are that it be provided as a named list and have either specific values or NA.

 var="age"
 vlist <- list(dum=NA)
 names(vlist)=var
 
 Predict(fit, factors=vlist, np=4)
#----- same result -------
       age     yhat    lower    upper
1 25.04901 6.834836 4.856497 8.813174
2 41.14259 6.882369 4.919433 8.845306
3 57.23618 6.929903 4.967118 8.892688
4 73.32977 6.977437 4.999548 8.955325

Response variable (y): log odds 

Limits are 0.95 confidence limits

-- 
David.

> 
> 
> Bill Dunlap
> TIBCO Software
> wdunlap tibco.com
> 
> On Tue, May 26, 2015 at 3:14 AM, wong jane <jane.wong083 at gmail.com> wrote:
> 
>> There are functions which use variable names as parameters in some R
>> packages. However, if the variable name is stored in another variable, how
>> can I pass this variable to the function. Taking the "rms" package as an
>> example:
>> 
>> library(rms)
>> n <- 1000
>> age <- rnorm(n, 50, 10)
>> sex <- factor(sample(c('female','male'), n,TRUE))
>> 
>> y <- rnorm(n, 200, 25)
>> ddist <- datadist(age, sex)
>> options(datadist='ddist')
>> fit <- lrm(y ~ age)
>> Predict(fit, age, np=4)
>> options(datadist=NULL)
>> 
>> Here "age" was a variable name passed to Predict() function, but if "age"
>> was stored in variable "var", that is, var <- "age", how can I pass "var"
>> to Predict() function? The purpose is that I want to change the parameter
>> of Predict()  in a loop.
>> 
>>        [[alternative HTML version deleted]]
-- 
> 

David Winsemius
Alameda, CA, USA



More information about the R-help mailing list