Вызов var () из pmap () purrr возвращает NA - PullRequest
0 голосов
/ 18 мая 2018

Я пытаюсь использовать pmap() из пакета purrr для упрощения моего кода.

У меня есть список векторов x;все векторы имеют одинаковую длину.Я хочу найти среднее и дисперсию всех n-х элементов по всем векторам в списке.То есть мне нужно среднее значение и дисперсию всех первых элементов, всех вторых элементов и т. Д.

До tidyverse я бы преобразовал x в матрицу и использовал apply().

x <- list(1:10, 1:10, 1:10)
x_matrix <- do.call(cbind, x)
apply(x_matrix, 1, mean)
##  [1]  1  2  3  4  5  6  7  8  9 10
apply(x_matrix, 1, var)
##  [1] 0 0 0 0 0 0 0 0 0 0

pmap() должно позволять это без преобразования матрицы.pmap_dbl() может заменить приведенные выше вычисления apply() и mean().

library(purrr)
pmap_dbl(x, mean)
##  [1]  1  2  3  4  5  6  7  8  9 10

Однако я не могу заставить pmap_dbl() и var() и вычисления работать.Я получаю NA за каждую дисперсию.

pmap_dbl(x, var)
##  [1] NA NA NA NA NA NA NA NA NA NA

Чего мне не хватает?

1 Ответ

0 голосов
/ 18 мая 2018

Мы можем использовать ~, а затем с помощью ... получить элементы и применить функцию

pmap_dbl(x, ~ var(c(...)))

Причиной различного поведения является разница в количестве параметров в mean и varmean, после объекта x другие параметры входят в ..., тогда как в var это не так, есть x, есть y и т. Д.

...