r - 如何在`purrr::map`中使用`dplyr::filter`
问题描述
这是一个非常简单的函数,它在使用时返回一个列表map
library(tidyverse)
simple_function <- function(x,y){
c(x+y, y-x)
}
1:3 %>%
map2(5,simple_function)
#> [[1]]
#> [1] 6 4
#>
#> [[2]]
#> [1] 7 3
#>
#> [[3]]
#> [1] 8 2
我想创建一个类似的函数,它可以根据关键字进行过滤并返回一个向量。所以这就是我做的
df <- structure(list(to_filter = c("YY", "XX", "XX", "YY", "XX", "XX",
"YY", "YY", "YY", "YY", "ZZ", "YY", "ZZ", "YY", "YY", "XX", "YY",
"YY", "YY", "YY"), num = c(1L, 2L, 2L, 4L, 2L, 3L, 3L, 5L, 3L,
1L, 4L, 5L, 1L, 2L, 5L, 1L, 1L, 3L, 5L, 5L)), row.names = c(NA,
-20L), class = c("tbl_df", "tbl", "data.frame"))
filter_func <- function(name, dff){
dff %>%
filter(to_filter == name) %>%
pull(num)
}
如您所见,当我单独使用该功能时,它可以正常工作
filter_func("YY", df)
#> [1] 1 4 3 5 3 1 5 2 5 1 3 5 5
但是当我在 a 中使用map
它时它不起作用
df %>%
pull(to_filter) %>%
unique() %>%
map2(df, filter_func)
#> Error: Mapped vectors must have consistent lengths:
#> * `.x` has length 3
#> * `.y` has length 2
我知道我在这里犯了一个非常基本的错误,但不知道是什么。
解决方案
您需要map
使用适当的函数调用而不是map_2
df %>%
pull(to_filter) %>%
unique() %>%
map(., .f = function(x) { filter_func(name = x, dff = df) })
输出
[[1]]
[1] 1 4 3 5 3 1 5 2 5 1 3 5 5
[[2]]
[1] 2 2 2 3 1
[[3]]
[1] 4 1
推荐阅读
- python - tensorflow tf.control_dependencies 和 tf.layers.batch_normalization 出错
- protractor - 量角器-如何处理量角器中的水平滚动条
- rest - 休息 API - CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY
- ssl - 通过 DNS 对多个子域和 IP 地址使用 autocert
- python-3.x - 是否可以从 unittest.TestCase 返回布尔值?
- r - R有效地计算三位数组合的频率
- c++ - SFINAE 检查失败
- amazon-web-services - 查找雅典娜查询结果的来源
- android - RecyclerView ListAdapter 没有正确更新列表
- azure-sql-database - 通过客户端网关连接到 VNET 时访问 Azure SQL 数据库