【发布时间】:2021-03-24 20:54:56
【问题描述】:
我想在这样的数据集上使用 map_chr 函数
library(purrr)
library(dplyr)
f <- function(x) if(x == "a") NULL else "blah"
f("a") # returns NULL
# make tibble
mytib <- tibble(test = c("a", "b"))
# naive map_chr
mytib %>% mutate(getf = map_chr(test, f))
# with .default
mytib %>% mutate(getf = map_chr(test, f, .default = NA_character_))
如您所见,map_chr 失败并显示错误消息Error: Problem with `mutate()` input `getf`. x unused argument (.default = NA)。
其他地方描述的可能和 na_if 的尝试对我也不起作用。
如何让 map_chr 遍历参数并将 NULL 值保留为 NA_character_ 或其他值?
【问题讨论】:
-
您需要
mytib %>% mutate(getf = map(test, f))并返回一个列表列NULL没有任何长度。您可以将f定义为f <- function(x) if(x == "a") NA_character_ else "blah",或者可以使用ifelse或case_when进行矢量化 -
有没有办法直接进入一个字符列?
-
这取决于你为什么指定
NULLreturn 而不是NA_character_然后map_chr工作正常 -
所以如果函数
f被定义为返回NULL,我必须编写一个返回NA的包装器? -
或类似
mytib %>% mutate(getf = map_chr(test, ~ {tmp <- f(.x); replace(tmp, is.null(tmp), NA_character_)}))