我正在尝试使用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
我错过了什么?
答案 0 :(得分:4)
我们可以使用~
然后使用...
获取元素,并应用函数
pmap_dbl(x, ~ var(c(...)))
不同行为的原因是mean
和var
中参数数量的差异。在mean
中,在对象x
之后,其他参数进入...
,而在var
中,情况不是这样,有x
,有y
等。