如何用map()函数获取嵌套列表中各week列最后5行的最大值
用map()提取嵌套列表指定行的week列最大值
数据结构
首先定义你的嵌套列表数据:
library(purrr) library(tibble) examplelist <- lst( n1 = tibble(letter = letters[1:10], week = c(100,200,300,400,500,1,2,3,4,5), rowcount = 1:10), n2 = tibble(letter = letters[11:20], week = c(100,200,300,400,500,0.1,0.2,0.3,0.4,0.5), rowcount = 1:10) )
需求
获取每个子tibble中week列最后5行(即rowcount > 5的行)的最大值,预期结果为c(5, 0.5)。
错误尝试与报错
你尝试的两种写法均不符合map_dbl()的语法要求:
# 错误写法1:传递了多个函数参数给map_dbl maxweek <- map_dbl(examplelist, ~subset(.,rowcount >5),~max(.[["week"]],na.rm = TRUE)) # 错误写法2:错误给max()传入不存在的subset参数 maxweek <- map_dbl(examplelist,~max(.[["week"]],subset=rowcount >5,na.rm = TRUE))
报错信息:
Error in
map_dbl():
ℹ In index: 1.
ℹ With name: n1.
Caused by error:
! Result must be length 1, not 3.
正确解决方案
方案1:直接嵌套子集筛选与最大值计算
maxweek <- map_dbl(examplelist, ~ max(subset(., rowcount > 5)$week, na.rm = TRUE))
方案2:用管道符(%>%)提升可读性
maxweek <- map_dbl(examplelist, ~ .x %>% filter(rowcount > 5) %>% pull(week) %>% max(na.rm = TRUE))
原理说明
map_dbl()的核心逻辑:遍历列表中的每个元素(这里是每个tibble),对每个元素执行单个匿名函数,最终返回一个数值型向量。- 错误原因解析:
- 第一种写法给
map_dbl()传递了3个参数,但它只接受1个函数参数,多余的函数会被当成额外参数传递,导致返回结果长度不符合要求。 - 第二种写法错误使用了
max()的参数——max()没有subset参数,这个参数属于subset()或dplyr::filter()这类筛选函数。
- 第一种写法给
- 正确逻辑链:对每个tibble → 筛选出
rowcount >5的行 → 提取week列 → 计算该列的最大值。
内容的提问来源于stack exchange,提问作者HHH
相关产品推荐
相关产品推荐

