dplyr:mutate_each 中的可选参数
dplyr: optional parameter in mutate_each
我在 R
中使用 dplyr
包。使用它我想创建一个像
这样的函数
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
相同的结果?
mutate_each
函数根本不将附加参数解释为传递给函数的参数。因此,一旦将其传递给 mutate_each
,就需要设置可选参数。您可以使用称为 currying 的函数式编程策略来完成此操作。本质上,您创建了一个新函数,其中更改了 optionalParam1
的默认值。您可以使用 functional
包中的 Curry
函数来执行此操作。
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
我在 R
中使用 dplyr
包。使用它我想创建一个像
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
相同的结果?
mutate_each
函数根本不将附加参数解释为传递给函数的参数。因此,一旦将其传递给 mutate_each
,就需要设置可选参数。您可以使用称为 currying 的函数式编程策略来完成此操作。本质上,您创建了一个新函数,其中更改了 optionalParam1
的默认值。您可以使用 functional
包中的 Curry
函数来执行此操作。
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