首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Purrr或Furrr进行过滤,并将字符向量传递到附加函数中。

使用Purrr或Furrr进行过滤,并将字符向量传递到附加函数中。
EN

Stack Overflow用户
提问于 2021-03-18 17:51:59
回答 1查看 120关注 0票数 0

我有一些非常低效的代码,我希望有人能帮助我。我没有一个很好的reprex,但是已经创建了我正在使用的当前代码/工作流的示例。

以下是我想做的简洁的事情

  • 将数据集过滤成组(
  • ),将过滤后的数据集传递到三个单独的函数(功能选择、验证和应用)

从特征选择到验证到应用程序,组(过滤)是一致的。

工作流程是:

group

  • Validation特征选择接受过滤后的数据,并为每个返回特征的字符向量:按组过滤数据,与1(特征选择)对应的组对应的字符向量结果。为每个组返回df,并只选择predictionlinear_weight列。然后行bind
  1. Application接受与2相同的2个参数(验证)。为每个组返回df,并根据每个组(来自1)、predictionlinear_weight中存在的特性选择列。然后行绑定

我毫不怀疑某些版本的purrr可能会使我的代码更高效&显着地改善运行时。我的一个想法是将select特性的结果保存到df中,其中的特性驻留在列中,并将该列结果传递给validate_dataapplicate_data函数。

为没有完全可复制的东西而道歉。希望这个例子给出了一个很好的想法,我正在努力实现。

代码语言:javascript
复制
library(gapminder)

data <- gapminder_unfiltered

# Filter data
group_1_data <- gapminder_unfiltered %>% 
  filter(country %in% c("Algeria", "Benin"))

group_2_data <- gapminder_unfiltered %>% 
  filter(country == "United States")

group_3_data <- gapminder_unfiltered %>% 
  filter(country %in% c("Italy", "France"))


# Feature Selection
group_1_features <- select_features(group_1_data)
group_2_features <- select_features(group_2_data)
group_3_features <- select_features(group_3_data)

# Example of group_1_features output
c("pop", "gdpPercap")

# Validation
group_1_validation <- validate_data(group_1_data, group_1_features)
group_2_validation <- validate_data(group_2_data, group_2_features)
group_3_validation <- validate_data(group_3_data, group_3_features)

# Row bind Validations selecting only created columns of "prediction" & "linear_weight"
all_validations

# Application: Same Inputs as Validation
group_1_application <- applicate_data(group_1_data, group_1_features)
group_2_application <- applicate_data(group_2_data, group_2_features)
group_3_application <- applicate_data(group_3_data, group_3_features)

# Row bind applications.  Select columns/features that exist in every group based on the feature selection.  Also select columns "prediction" & "linear_weight"
total_applications
EN

回答 1

Stack Overflow用户

发布于 2021-03-18 19:04:43

purrr::map可以使用,因为在一个列表中存储了三个数据帧,然后您可以减少结果,将所有的结果绑定到一起。

代码语言:javascript
复制
library(dplyr)

groups_data=list(group_1_data, group_2_data, group_3_data)

select_features=function(d) {
  features=c()
  if (sample(c(0,1), 1)==0) {
    features=c("pop", "gdpPercap")
  } else {
    features=c("pop", "gdpPercap", "lifeExp")
  }
  return(list(d,
              features))
}

features_list=purrr::map(groups_data, select_features)

validate_data=function(feat_list) {
  d=feat_list[[1]]
  ret=mutate(d, prediction=rnorm(nrow(d)), linear_weight=runif(nrow(d)))
  return (ret)
}

val_list=purrr::map(features_list, validate_data)

Reduce(function(x, y) {
  return(rbind(x, select(y, prediction, linear_weight))) 
}, val_list[2:3], init=select(val_list[[1]], prediction, linear_weight))

applicate_data=function(feat_list) {
  d=feat_list[[1]]
  ret=mutate(d, prediction=rnorm(nrow(d)), linear_weight=runif(nrow(d)))
  return (ret)
}

appl_list=purrr::map(features_list, applicate_data)

Reduce(function(x, y) {
  return(rbind(x, select(y, prediction, linear_weight))) 
}, appl_list[2:3], init=select(appl_list[[1]], prediction, linear_weight))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66696499

复制
相关文章

相似问题

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