R map_dbl() для извлечения символа

#r

#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, …) . Что такое «…» и какие аргументы считаются приемлемыми для функции?

Комментарии:

1. Я ничего не вижу с .null in ?map_dbl .

Ответ №1:

Я не смог найти ничего .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)))
 

Ответ №2:

Мы можем использовать 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