在 purrr pmap 中传递 NULL
Passing NULL in purrr pmap
我有一个有时 returns 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))
你传给pmap
的列表里的东西应该是"iterable"。 NULL 本身不能被迭代,因为大多数函数被设计为不将其视为对象。 length(NULL)==0
所以它看起来是空的。也许试试
pmap(list(list(iris), list(NULL)), plot_fun)
相反。 NULL 的行为不像列表或向量,因此您在使用它们时需要小心。在这里,通过将其放入列表中,可以迭代该列表。
我有一个有时 returns 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))
你传给pmap
的列表里的东西应该是"iterable"。 NULL 本身不能被迭代,因为大多数函数被设计为不将其视为对象。 length(NULL)==0
所以它看起来是空的。也许试试
pmap(list(list(iris), list(NULL)), plot_fun)
相反。 NULL 的行为不像列表或向量,因此您在使用它们时需要小心。在这里,通过将其放入列表中,可以迭代该列表。