从purrr的pmap()调用var()会返回NA

时间:2018-05-18 17:55:55

标签: r tidyverse purrr pmap

我正在尝试使用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 :(得分:4)

我们可以使用~然后使用...获取元素,并应用函数

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

不同行为的原因是meanvar中参数数量的差异。在mean中,在对象x之后,其他参数进入...,而在var中,情况不是这样,有x,有y等。