如何传递参数列表以部分匹配函数的参数?

时间:2017-11-03 06:07:04

标签: r

我想传递一个列表来部分匹配函数的参数。我在这里寻找与do.call方法相同的简单语法:Passing list of named parameters to function?

以下是一个示例(摘自https://stackoverflow.com/a/15059219/2109289),其中调用mapply(FUN, ...)要求将数据框列逐个传递给...

> df <- data.frame(x=c(1,2), y=c(3,4), z=c(5,6))
> df
  x y z
1 1 3 5
2 2 4 6
> mapply(function(x,y) x+y, df$x, df$z)
[1] 6 8

如果您只是将数据框df[, c("x", "z")]作为参数传递,那会不会很好?

E.g:

df <- data.frame(x=c(1,2), y=c(3,4), z=c(5,6))
do.call(function(x, y) mapply(function(x,y) x+y, x, y), unname(df[, c("x", "z")]))
# [1] 6 8
do.call(function(...) mapply(function(x,y) x+y, list(...)[[1]], list(...)[[2]]), df[, c("x", "z")])
# [1] 6 8

有没有更好的方法来执行此操作而不是创建要传递给do.call的闭包?

1 个答案:

答案 0 :(得分:2)

一个选项是

unlist(do.call(Map, c(f = `+`, df[c('x', 'z')])))
#[1] 6 8

或使用mapply

do.call(mapply, c(FUN = `+`, df[c('x', 'z')]))
#[1] 6 8