首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为列表中的每个元素应用一个具有更改参数值的函数

为列表中的每个元素应用一个具有更改参数值的函数
EN

Stack Overflow用户
提问于 2015-12-10 21:11:38
回答 3查看 763关注 0票数 1

我有一个数据帧列表

代码语言:javascript
运行
复制
listofdf <-  list(a = a, b = b, c = c)

我有一个功能:

代码语言:javascript
运行
复制
remove_outliers <- function(x, ll, ul) {
  require(dplyr)
  x <- x %>% filter(SALES < quantile(SALES, probs = c(ll)) & SALES > quantile(SALES, probs = c(ul)))
  return(x)
}

我想在列表上应用这个函数。条件是,参数ul ll 的值对于列表中的每个元素都会发生变化。

I不能写: lapply(listofdf, remove_outliers, 0.01, 0.99),因为0.01-0.99的变化取决于df。

我预感到可以使用Mapmapply解决这个问题,因此我尝试了以下方法:

listofdf <- Map(remove_outliers, listofdf, MoreArgs = list(ll = c(0.1, 0.2, 0.3), ul = c(0.90, 0.95, 0.99)))

但我有错误:

代码语言:javascript
运行
复制
Warning messages:
1: In filter_impl(.data, dots) :
  longer object length is not a multiple of shorter object length
2: In filter_impl(.data, dots) :
  longer object length is not a multiple of shorter object length
3: In filter_impl(.data, dots) :
  longer object length is not a multiple of shorter object length
4: In filter_impl(.data, dots) :
  longer object length is not a multiple of shorter object length
EN

回答 3

Stack Overflow用户

发布于 2015-12-10 21:50:21

在这里,我尝试了一个虚拟的removeOutlier函数

代码语言:javascript
运行
复制
remove_outliers <- function(x, ll, ul) {
return(x>ll & x< ul)
}
listofdf <-  list(a = 1:10, b = 100:120, c = 1000:1010)

filt<- mapply( FUN=remove_outliers, listofdf , 
    ll=c(2,102,1004), ul=c(8,117,1008)  )

res<- mapply(FUN="[", listofdf,filt)
res 
票数 1
EN

Stack Overflow用户

发布于 2015-12-10 22:07:19

你传递论点的方式可能有问题。只需尝试:

代码语言:javascript
运行
复制
    mapply(remove_outilers, l, ll = c(0.1, 0.2, 0.3), ul = c(0.90, 0.95, 0.99))
票数 1
EN

Stack Overflow用户

发布于 2015-12-10 21:42:59

为什么不绑定到一个数据文件中呢?

代码语言:javascript
运行
复制
big_data =
  listofdf %>%
  bind_rows(.id = "source")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34211802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档