我想使用单个对象将多个输入传递给R中的函数,这可能吗? MWE:
df <- data.frame(yes = c(10,20), no = c(50,60),maybe = c(100,200))
fxn <- function(x,y,z){
a = x + y
b = x + z
c = y + z
return(list(a=a,b=b,c=c))
}
foo <- c("rincon","malibu","steamer")
bar <- c("no","maybe")
df[foo] <- fxn(df$yes,df[bar])
在实际问题中,我的函数有更多输入,默认情况下设置为NULL
。我正在动态的闪亮环境中工作,因此bar
的值和长度正在变化。对于这个新手的任何帮助,将不胜感激。
答案 0 :(得分:3)
使用基数R,您可以使用do.call
建立调用并创建要传递给函数的参数list()
do.call("fxn", c(list(df$yes), unname(df[bar])))
这与
相同fxn(df$yes, df[bar][[1]], df[bar][[2]])
我们需要使用unname()
,因为否则您的函数期望“ y”和“ z”时,您的参数将分别命名为“ no”和“ maybe”。
您可以使用rlang
包
library(rlang)
eval_tidy(quo(fxn(df$yes, !!!unname(df[bar]))))
与其他一些语言一样,它使用!!!
拼接操作符。 Base R没有这样的语法。