在这个问题Name output of pmap on tibble中,我问了如何正确命名pmap呼叫的输出,得到了一个很好的答案,我想我明白了.

不过,当我进一步调查这种行为时,我不再确定我是否理解了内在原理:

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

## 1. setting names on the first argument gives the expected results
params %>%
  mutate(nm = set_names(nm)) %>% 
  pmap(function(nm, x, y, ...) {
    x + y
  }) %>%
  names()
# [1] "A" "B"


## 2. actually it does not need to be the first element
params %>%
  mutate(nm = set_names(nm)) %>% 
  pmap(function(x, y, nm, ...) {
    x + y
  }) %>%
  names()
# [1] "A" "B"

## 3. however, setting names on `x` does not work
params %>%
  mutate(x = set_names(x, nm)) %>% 
  pmap(function(x, y, nm, ...) {
    x + y
  }) %>%
  names()
# NULL

## 4. I thought maybe because they disappear during the addition `+`, but nope
params %>%
  mutate(z = set_names(z, nm)) %>% 
  pmap(function(x, y, nm, ...) {
    x + y
  }) %>%
  names()
# NULL

## 5. Ok maybe a catch all argument `...` prohibits this behaviour, but no
params %>%
  mutate(z = set_names(z, nm)) %>% 
  pmap(function(x, y, nm, z) {
    x + y
  }) %>%
  names()
# NULL

## 6. It seems that names on a character vector work even if not referenced directly
params %>%
  mutate(nm = set_names(nm)) %>% 
  pmap(function(x, y, ...) {
    x + y
  }) %>%
  names()
# [1] "A" "B"

有人能告诉我[p]map电话中名字最终是如何确定的吗?

推荐答案

Answer taken from my comment on original question.

名称取自tibble/data.frame的第一列( struct 上是一个载体列表),并应用于结果列表(对函数的调用).

因此,这与函数本身如何计算结果几乎无关.

步骤

  1. 从tibble/data.Frame的第一列提取名称(对于pmap),否则从x提取名称
  2. 将函数应用于元素并收集结果
  3. 使用步骤1中提取的名称命名结果元素

R相关问答推荐

为什么以及如何修复Mapview不显示所有点并且st_buffer合并一些区域R?

以R为基数排列奇数个图

单击 map 后,将坐标复制到剪贴板

抖动点与嵌套类别变量箱形图的位置不对齐

更改编号列表的 colored颜色

用值序列对行进行子集化,并标识序列开始的列

使用sf或terra的LINESTRAING的累积长度

如何在geom_col中反转条

将饼图插入条形图

通过在colname中查找其相应值来创建列

如何通过判断数据框的一列来压缩另一列?

如何根据R中其他变量的类别汇总值?

在gggraph中显示来自不同数据帧的单个值

如何删除设置大小的曲线图并添加条形图顶部数字的百分比

错误包arrowR:READ_PARQUET/OPEN_DATASET&QOT;无法反序列化SARIFT:TProtocolException:超出大小限制&Quot;

变异以按组从其他列创建具有最大和最小值的新列

我正在try 创建一个接近cos(X)的值的While循环,以便它在-或+1-E10范围内

Broom.Mixed::Augment不适用于Sample::分析

从字符串01JAN2021创建日期

创建两个变量组合的索引矩阵