这是一个初学者愚蠢的R问题:
df <- tribble(
~x,
list(a = 1, b = 2),
list(a = 2, c = 4)
)
df %>%
mutate(
a = map_dbl(x, "a"),
b = map_dbl(x, "b", .null = NA_real_)
)
问题 1:在帮助或 RSiteSearch() 中,我不为 .null 提供任何资金。 我在哪里可以学习使用它的适当时间?
问题2:在帮助中,我总是看到这个:map_dbl(.x,.f,...)。 什么是"..."对于函数来说,什么是/是否可以接受的参数?
我在?map_dbl
文档中找不到任何与.null
有关的内容。
...
用作可传递给函数.f
附加参数。这类似于许多其他功能中存在的内容,例如?aggregate
.要理解这一点,请考虑此示例。
df <- structure(list(a = 1:2, b = list(c(1, 2), c(2, NA))), row.names = c(NA,
-2L), class = c("tbl_df", "tbl", "data.frame"))
df
# a b
# <int> <list>
#1 1 <dbl [2]>
#2 2 <dbl [2]>
df$b
#[[1]]
#[1] 1 2
#[[2]]
#[1] 2 NA
请注意,b
的第二个元素中有NA
值。
为了使用map_dbl
来表示b
中的每个列表,我们可以这样做:
library(dplyr)
library(purrr)
df %>% mutate(c = map_dbl(b, mean))
# a b c
# <int> <list> <dbl>
#1 1 <dbl [2]> 1.5
#2 2 <dbl [2]> NA
要忽略NA
值,我们需要在可以使用...
部分的mean
中传递na.rm = TRUE
。
df %>% mutate(c = map_dbl(b, mean, na.rm = TRUE))
# a b c
# <int> <list> <dbl>
#1 1 <dbl [2]> 1.5
#2 2 <dbl [2]> 2
如果使用匿名函数或公式样式语法,则可以忽略...
部分。
df %>% mutate(c = map_dbl(b, ~mean(., na.rm = TRUE)))
我们可以使用sapply
df %>%
mutate(c = sapply(b, mean, na.rm = TRUE))
# A tibble: 2 x 3
# a b c
# <int> <list> <dbl>
#1 1 <dbl [2]> 1.5
#2 2 <dbl [2]> 2