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

如何在purrr::map()中获取传入的输入(列)名称?

在purrr::map()中获取传入的输入名称

嘿,这个问题我之前也碰到过!用purrr::map()的时候,默认不会把输入的名称传递进去,但有几个简单的办法能解决,让你既能拿到计算结果,又能清楚知道每个结果对应的原输入名称。我给你一步步演示下:

先看现有代码和问题

假设你有这样的代码,对数据框的每列做计算,但输出只有结果,没有对应的列名:

library(purrr)
library(tibble)

# 示例数据框
my_df <- tibble(a = 1:3, b = 4:6, c = 7:9)

# 现有map调用:只返回计算结果
current_output <- map(my_df, ~ sum(.x) * 2)
current_output
#> $a
#> [1] 12
#> $b
#> [1] 30
#> $c
#> [1] 48

你想要的目标输出是把原输入的名称(比如列名a/b/c)和结果放在一起,像这样:

#> # A tibble: 3 × 2
#>   input_name result
#>   <chr>       <dbl>
#> 1 a              12
#> 2 b              30
#> 3 c              48

方法1:用purrr::imap()(最简洁)

imap()是map2()的语法糖,专门为带名称的输入设计——它会自动把输入的名称传给.y参数,把输入的值传给.x参数。直接用它来生成包含名称的结果,再绑定成数据框就行:

# 用imap实现目标输出
target_output <- imap(my_df, ~ tibble(input_name = .y, result = sum(.x) * 2)) %>%
  bind_rows()

target_output

方法2:用map2()手动配对名称和值

如果你更习惯用基础的map系列函数,也可以手动提取输入的名称,和输入值配对后用map2()处理:

# 提取列名,和列值一起传入map2
target_output <- map2(names(my_df), my_df, ~ tibble(input_name = .x, result = sum(.y) * 2)) %>%
  bind_rows()

额外说明

这两种方法不仅适用于数据框的列,对命名列表同样有效——只要你的输入是带名称的,names()能提取出名称,imap()就能自动识别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:52:44