R: dynamic arguments

dter

I'm using an R function which requires a list of variables as input arguments in the following format:

  output <- funName(gender ~ height + weight + varName4, data=tableName)

Basically the input arguments are column names in the table (and are not to be enclosed in ""). I have a list of these variables that I want to add one by one; i.e. run the function with one variable first, get the output, and incrementally adding variables (getting an output each time) i.e.

iteration 1:

  output <- funName(gender ~ height, data=tableName)

iteration 2:

  output <- funName(gender ~ height + weight, data=tableName)

iteration 3:

  output <- funName(gender ~ height + weight + varName4, data=tableName)

Is this possible?

lmo

Try the following:

# vector of variable names
myNames <- c("gender", "height", "weight", "varName4")

# print out results
for(i in 2:4) {
  print(as.formula(paste(myNames[1], "~", paste(myNames[2:i], collapse="+"))))
}

Of course, you can replace print with the appropriate funName, such as lm, along with additional arguments. So

for(i in 2:4) {
  lm(as.formula(paste(myNames[1], "~", paste(myNames[2:i], collapse="+"))), data=tableName)
}

Should work as you would expect it to. You could also use lapply if you wanted to save the results in an orderly fashion:

temp <- lapply(2:4, function(i) as.formula(paste(myNames[1], "~", 
                                             paste(myNames[2:i], collapse="+"))))

will save a list of formulas, for example.

Using the reformulate function as mentioned by @ben-bolker, you can simplify the web of paste functions:

for(i in 2:4) {
  print(reformulate(myNames[2:i], response = myNames[1], intercept = TRUE)) 
}

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related