#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