Передача NULL в purrr pmap - PullRequest
       23

Передача NULL в purrr pmap

2 голосов
/ 06 апреля 2020

У меня есть функция, которая иногда возвращает NULL, и я пытаюсь передать ее позже, используя pmap. Когда я вызываю ту же функцию напрямую, она отлично работает, но не с pmap. Ожидается ли это, если да, то почему? Любое решение?

library(tidyverse)

plot_fun <- function(data, color_by){

  plot <- ggplot(data, aes_string(x = 'Sepal.Length', 
                                  y = 'Sepal.Width',
                                  color = color_by)) +
    geom_point()

  return(plot)


}

# works fine:

plot_fun(iris, 'Species')
plot_fun(iris, NULL)
pmap(list(list(iris), 'Species'), plot_fun)

# does not work:

pmap(list(list(iris), NULL), plot_fun)
pmap(list(list(iris), NULL), ~plot_fun(..1, ..2))

1 Ответ

1 голос
/ 06 апреля 2020

Вещи в списке, который вы передаете pmap, должны быть "повторяемыми". NULL сам по себе не может быть beiterated, потому что большинство функций разработаны, чтобы не видеть его как объект. length(NULL)==0 так что выглядит пустым. Возможно, вместо этого попробуйте

pmap(list(list(iris), list(NULL)), plot_fun) 

. NULL не ведут себя как списки или векторы, поэтому вы должны быть осторожны при их использовании. Здесь, поместив его в список, этот список можно повторить.

...