Nesta questão Nomeie a saída do pmap no tibble perguntei como nomear corretamente a saída de uma pmap
chamada e obtive uma boa resposta, que achei ter entendido.
Porém, quando investiguei mais detalhadamente esse comportamento, não tenho mais tanta certeza de entender os intrínsecos:
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"
Alguém pode me esclarecer como os nomes são determinados em uma [p]map
chamada?
Resposta retirada do meu comentário na pergunta original.
Os nomes são retirados da primeira coluna do seu
tibble/data.frame
(que é estruturalmente uma lista de vetores) e aplicados à lista de resultados (chamadas à função).Portanto, não tem quase nada a ver com a forma como a função por si só calcula o resultado.
As etapas são
pmap
), caso contrário, extraia nomes dex