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

purrr::pmap输出命名规则探究:为何部分设置不生效?

[p]map调用输出名称的判定规则解析

我之前在Stack Overflow提问《Name output of pmap on tibble》,已得到解答,但后续测试发现仍未掌握内在逻辑。以下是测试代码及结果:

测试准备

先加载依赖包并定义参数表:

library(purrr)
library(tibble)
params <- tibble(nm = LETTERS[1:2], x = 1:2, y = 2:3, z = 1:2)

案例1:为nm设置名称后,输出获得预期名称

params %>%
  mutate(nm = set_names(nm)) %>%
  pmap(function(nm, x, y, ...) {
    x + y
  }) %>%
  names()
# [1] "A" "B"

案例2:nm无需是函数第一个参数,输出仍能获得名称

params %>%
  mutate(nm = set_names(nm)) %>%
  pmap(function(x, y, nm, ...) {
    x + y
  }) %>%
  names()
# [1] "A" "B"

案例3:为x设置名称,输出无名称

params %>%
  mutate(x = set_names(x, nm)) %>%
  pmap(function(x, y, nm, ...) {
    x + y
  }) %>%
  names()
# NULL

案例4:为z设置名称,输出仍无名称(排除运算丢失名称的可能)

params %>%
  mutate(z = set_names(z, nm)) %>%
  pmap(function(x, y, nm, ...) {
    x + y
  }) %>%
  names()
# NULL

案例5:去掉...参数,为z设置名称仍无效

params %>%
  mutate(z = set_names(z, nm)) %>%
  pmap(function(x, y, nm, z) {
    x + y
  }) %>%
  names()
# NULL

案例6:nm设置名称后,即使函数未直接引用nm,输出仍能获得名称

params %>%
  mutate(nm = set_names(nm)) %>%
  pmap(function(x, y, ...) {
    x + y
  }) %>%
  names()
# [1] "A" "B"

核心规则解析

[p]map系列函数的输出名称,是从输入的带名称的字符型原子向量列中提取的,关键规则如下:

  • pmap处理数据框/ tibble时,会检查所有列,只要存在自身带有名称的字符型向量列,就会将该列的元素名称作为对应输出元素的名称。
  • 这个列不需要被函数显式调用,也不限制它在参数列表中的位置。
  • 非字符型的列(比如数值型)即使带有名称,也不会被用来命名输出。

对应到测试案例:

  • 案例1、2、6中,nm是带名称的字符型向量,符合条件,因此输出被自动命名。
  • 案例3、4、5中,被设置名称的是数值型列,不符合要求,所以输出无名称。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 23:12:36