Почему purrr::map() R пытается преобразовать мой вывод в функцию?

avatar
Christopher Carroll Smith
1 июля 2021 в 15:52
73
1
0

Я уверен, что этому есть простое объяснение, но сегодня утром в мозгу сильный туман, и я в растерянности. Я пытаюсь использовать purrr::map() для вызова функции, которая иногда возвращает NA, но постоянно получаю сообщение об ошибке:

"Ошибка: невозможно преобразовать логический вектор в функцию"

Вот упрощенный случай, который возвращает ошибку:

library(tidyverse)

test <- function(x){
  return(NA)
}

a <- map(.x = 1:2,.f = test())

R классифицирует NA как логическую переменную, но я не понимаю, почему map() пытается преобразовать эту переменную в функцию, когда я возвращаю ее. Что я здесь делаю не так?

Источник
aosmith
1 июля 2021 в 15:55
4

Я думаю, вы хотите .f = test?

IRTFM
1 июля 2021 в 16:32
1

test() — это вызов, потому что вы включили разделители параметров. Если бы вы просто использовали его имя, test, возможно, вы преуспели. (После того, как вызов был оценен, он вернул логический вектор.) Ответ на ваш антропоморфный вопрос в заголовке: «Потому что ему нужна или нужна функция».

Ответы (1)

avatar
MrFlick
1 июля 2021 в 16:08
2

Вы должны использовать

a <- map(.x = 1:2,.f = test)

без скобок. Аргумент .f должен быть функцией — вы не хотите вызывать свою функцию там.

Обратите внимание, что class(test) — это «функция», а class(test()) — нет — в данном случае это «логично». Опускайте скобки при ссылке на саму функцию. В противном случае то, что вы набрали, совпадает с

.
# these are the same
a <- map(.x = 1:2, .f = test())
a <- map(.x = 1:2, .f = NA)
Christopher Carroll Smith
1 июля 2021 в 16:12
0

О, парень. Я знал, что это будет что-то простое. Большое спасибо!