gpt4 book ai didi

r - dplyr:mutate_each 中的可选参数

转载 作者:行者123 更新时间:2023-12-01 00:51:56 25 4
gpt4 key购买 nike

我使用 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 达到同样的结果?

最佳答案

mutate_each function 只是不会将附加参数解释为传递给函数的参数。所以,一旦你把它传递给 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

关于r - dplyr:mutate_each 中的可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30756331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com