You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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),对每个元素执行单个匿名函数,最终返回一个数值型向量。
  • 错误原因解析:
    1. 第一种写法给map_dbl()传递了3个参数,但它只接受1个函数参数,多余的函数会被当成额外参数传递,导致返回结果长度不符合要求。
    2. 第二种写法错误使用了max()的参数——max()没有subset参数,这个参数属于subset()或dplyr::filter()这类筛选函数。
  • 正确逻辑链:对每个tibble → 筛选出rowcount >5的行 → 提取week列 → 计算该列的最大值。

内容的提问来源于stack exchange,提问作者HHH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 03:52:52