3

我试图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()andmean()计算。

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

我错过了什么?

4

1 回答 1

4

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

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

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

于 2018-05-18T17:58:17.403 回答