r - Purrr 映射多个功能和两个输入
问题描述
我正在尝试使用purrr
将多个函数映射到两个输入。下面给出了一个示例,但理想情况下,我想将其扩展到更多功能。尝试执行此操作时,我收到一个错误,即找不到输入,但是,即使我尝试在函数列表中命名输入,这也不能解决问题。
library(yardstick)
library(tidyverse)
funcs <- list(accuracy = yardstick::accuracy_vec,
recall = yardstick::recall_vec)
n <- 1000
x <- as.factor(rbinom(n, 1, 0.5))
y <- as.factor(rbinom(n, 1, 0.5))
df <- tibble(true = rep(list(y), 3),
preds = rep(list(x), 3))
df
#> # A tibble: 3 x 2
#> true preds
#> <list> <list>
#> 1 <int [1,000]> <int [1,000]>
#> 2 <int [1,000]> <int [1,000]>
#> 3 <int [1,000]> <int [1,000]>
df %>% map2_df(.x = true, .y = preds, .f = funcs)
#> Error in map2(.x, .y, .f, ...): object 'true' not found
funcs <- list(accuracy = ~yardstick::accuracy_vec(truth = .x, estimate = .y),
recall = ~yardstick::recall_vec(truth = .x, estimate = .y))
df %>% map2_df(.x = true, .y = preds, .f = funcs)
#> Error in map2(.x, .y, .f, ...): object 'true' not found
理想情况下,我最终会得到这样的结果:
# A tibble: 3 x 4
true preds accuracy recall
<list> <list> <dbl> <dbl>
1 <int [1,000]> <int [1,000]> 0.7 0.8
2 <int [1,000]> <int [1,000]> 0.7 0.8
3 <int [1,000]> <int [1,000]> 0.7 0.8
非常感谢任何帮助,TIA
解决方案
您可以使用嵌套地图:
df %>%
mutate(map2_dfr(true, preds, ~map_dfc(funcs, do.call, list(.x, .y))))
推荐阅读
- postgresql - 如何在 Docker Compose 中加载数据之前等待 Postgres 准备就绪
- ms-access - MS 将某些列访问为行
- python-3.x - 如何在python中的一行之前添加一个空格
- python - 计算每列的唯一值总数
- python - Python Sockets 端口转发
- neo4j - 我的匹配/合并过程没有在 Neo4J 数据库中创建关系
- javascript - 如何以干净的方式从类列表数组中获取特定类?
- sql - 通配符搜索数字范围
- javascript - 在 iOS 浏览器上打开 iframe 内多个页面的 PDF 文件
- material-ui - Material UI:幻灯片过渡组件 - 是否可以更改变换距离?