我有一些非常低效的代码,我希望有人能帮助我。我没有一个很好的reprex,但是已经创建了我正在使用的当前代码/工作流的示例。
以下是我想做的简洁的事情
从特征选择到验证到应用程序,组(过滤)是一致的。
工作流程是:
group
df,并只选择prediction和linear_weight列。然后行binddf,并根据每个组(来自1)、prediction和linear_weight中存在的特性选择列。然后行绑定我毫不怀疑某些版本的purrr可能会使我的代码更高效&显着地改善运行时。我的一个想法是将select特性的结果保存到df中,其中的特性驻留在列中,并将该列结果传递给validate_data和applicate_data函数。
为没有完全可复制的东西而道歉。希望这个例子给出了一个很好的想法,我正在努力实现。
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发布于 2021-03-18 19:04:43
purrr::map可以使用,因为在一个列表中存储了三个数据帧,然后您可以减少结果,将所有的结果绑定到一起。
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))https://stackoverflow.com/questions/66696499
复制相似问题