首页 > 解决方案 > R map_dbl() 提取字符

问题描述

这是一个初学者愚蠢的 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, ...)。什么是“...”以及什么是函数可接受的参数?

标签: r

解决方案


.null?map_dbl.

...用作可以传递给.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

请注意,NA在 的第二个元素中有值b

为了取每个列表的平均值,b我们map_dbl可以这样做:

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值,我们需要传入可以使用na.rm = TRUE的部分。mean...

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)))

推荐阅读