我想在purrr包的map函数中使用省略号参数。这是一个玩具的例子:
f1<-function(x,a=NA,b=NA,prs=seq(0, 1, 0.25),SW=T){
if(SW){
res<-data.frame(name1=a,name2=b,t(quantile(x, prs, na.rm = T)), mean=mean(x, na.rm = T), sd=sd(x, na.rm = T),
NAs=length(x[is.na(x)]),n=length(x[!is.na(x)]),SWp=shapiro.test(x)$p.value,stringsAsFactors =F)
}else
{
res<-data.frame(name1=a,name2=b,t(quantile(x, prs, na.rm = T)), mean=mean(x, na.rm = T), sd=sd(x, na.rm = T),
NAs=length(x[is.na(x)]),n=length(x[!is.na(x)]),stringsAsFactors =F)
}
return(res)
}
f1(c(NA,rnorm(25),NA),SW=F)
f1(c(NA,rnorm(25),NA))
现在我想在另一个函数f2中使用f1:
f2<-function(df,...){
res<-map_df(colnames(df),~f1(df[,.],a=.,...))
return(res)
}
其中......主要用于操纵f1函数中的SW和a或b参数。但是f2没有做我想要的,这里可以看到
f2(iris[,-5])
f2(iris[,-5],SW=F)
我感谢任何指导如何使用addecuatelly ...在地图内
答案 0 :(得分:4)
您只需要通过map_df()
调用传递省略号。否则他们无法进入内部f1()
电话。
f2 <- function(df, ...){
res <- map_df(colnames(df), ~f1(df[,.], a=., ...), ...)
return(res)
}
答案 1 :(得分:0)
您还可以在第二个功能中尽早捕获椭圆,并在以后使用type mismatch
将其添加到第一个功能中。这样可以更清楚地在何处以及如何使用它们。
do.call
答案 2 :(得分:0)
MrFlick解决方案对我不起作用:我认为确实您还需要将//throttle for 5 secs if it's already been called with this KEY
Debouncer.Debounce("Some-Unique-ID", () => SendEmails(), 5);
传递给匿名函数,该函数随后需要使用Debouncer.Debounce("Some-Unique-ID", () =>
{
//do some work here
}, 5);
而不是...
(如@ dmi3kno)。
这意味着您需要非常令人惊讶的三次function(x,...)
通话:
~
示例:
...
由reprex package(v0.3.0)于2020-11-16创建
答案 3 :(得分:0)
对于这个问题,我发现 rlang::exec()
允许您在与匿名函数结合使用时将 ... 传递给 purrr::map()
,如下所示:
f2 <- function(df, ...){
res <- map(colnames(df), function(x) rlang::exec("f1", df[,x], ...))
return(res)
}