dplyr:mutate_each中的可选参数

时间:2015-06-10 12:26:29

标签: r dplyr

我使用dplyr中的R包。使用我想创建一个像

这样的函数
require(dplyr)
aFunction <- function(x, optionalParam1="abc"){
    cat(optionalParam1, "\n")
    return(x)
}
myFun <- function(data, ...){
    result <- data %>% mutate_each(funs(aFunction(., ...)))
}

然后将其称为

data = data.frame(c1=c(1,2,3), c2=c(1,2,3))
myFun(data) # works
myFun(data, optionalParam1="xyz") # doesn't work

调用myFun时,所有可选参数都应传递给aFunction。但是抛出了错误'...' used in an incorrect context

这是没有dplyr的相同功能,它应该有效......

myFun2 <- function(data, ...){
    for(c in colnames(data)){
        data[,c] = aFunction(data[,c], ...)
    }
}

如何使用dplyr获得相同的结果?

1 个答案:

答案 0 :(得分:4)

mutate_each函数不会将其他参数解释为传递给函数的参数。因此,一旦将其传递给mutate_each,就需要设置可选参数。您可以使用名为currying的函数式编程策略来完成此操作。实际上,您创建了一个新函数,其中默认值optionalParam1已更改。您可以使用Curry包中的functional函数执行此操作。

aFunction <- function(x, optionalParam1="abc"){
    cat(optionalParam1, "\n")
    return(x)
}

myFun <- function(data, ...){
    require(functional)
    special_aFunction = Curry(aFunction, ...)
    result <- data %>% mutate_each(funs(special_aFunction))
}

> data = data.frame(c1=c(1,2,3), c2=c(1,2,3))
> myFun(data)
abc 
abc 
> myFun(data, optionalParam1="xyz") # now works
xyz 
xyz