Home > front end >  Passing outer function params to inner function
Passing outer function params to inner function

Time:10-10

Following on from my previous challenging exercise: promise already under evaluation with nesting from function, I have learnt thus far how to properly use: enquos, !!!, c() within a function for a variety of calling methods. However, my next challenge is more complex - I want to call a function within a function, and only passing it parameters from the outer function. Essentially, I wanted to make a list of functions and pass different parameters to each element from the list by using another function.

for example:

anotherTest <- function(data,...){
  cols = enquos(...)
  
  testFunc <- function(df, more){
   df %>% mutate(!!!c(more))
  }
  n <- length(cols)
  addMutation <- replicate(n, testFunc, simplify=FALSE)
  print(addMutation)
  addCars <- replicate(n, data)
  mapply(function(x, y, z) x %>% reduce(., y, z),addCars, addMutation, cols)
}

When I call:

anotherTest(mtcars, vs, gear, am)

I get this error:

Error in fn(out, elt, ...) : unused argument (~vs)

CodePudding user response:

We could try

anotherTest <- function(data,...){
  cols = enquos(...)
  
  testFunc <- function(df, more){
   df %>% mutate(!!!c(more))
  }
  n <- length(cols)
  addMutation <- replicate(n, testFunc, simplify=FALSE)
 
  addCars <- replicate(n, data, simplify = FALSE)

Map(function(x, y, z) y(x, z), addCars, addMutation, cols)
}

-testing

out <- anotherTest(mtcars, vs, gear, am)
> lapply(out, head, 3)
[[1]]
               mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4     21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710    22.8   4  108  93 3.85 2.320 18.61  1  1    4    1

[[2]]
               mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4     21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710    22.8   4  108  93 3.85 2.320 18.61  1  1    4    1

[[3]]
               mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4     21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710    22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
  • Related