r-将外部函数参数传递给内部函数



继我之前富有挑战性的练习:promise已经在通过函数嵌套进行评估之后,到目前为止,我已经学会了如何在函数中正确使用:enquos, !!!, c()来进行各种调用方法。然而,我的下一个挑战更为复杂——我想在函数中调用一个函数,并且只从外部函数传递参数。本质上,我想制作一个函数列表,并通过使用另一个函数将不同的参数传递给列表中的每个元素。

例如:

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)
}

当我打电话时:

anotherTest(mtcars, vs, gear, am)

我得到这个错误:

fn(out,elt,…(中的错误:未使用的参数(~vs(

我们可以试试

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)
}

-测试

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

最新更新