从 purrr 的 pmap() 调用 var() returns NA
Calling var() from purrr's pmap() returns NA
我正在尝试使用 purrr
包中的 pmap()
来简化我的代码。
我有一个向量列表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
我错过了什么?
我们可以使用~
然后用...
获取元素,然后应用函数
pmap_dbl(x, ~ var(c(...)))
行为不同的原因是 mean
和 var
中的参数数量不同。在mean
中,对象x
之后,其他参数进入...
,而在var
中,不是这样,有x
,有y
等
我正在尝试使用 purrr
包中的 pmap()
来简化我的代码。
我有一个向量列表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
我错过了什么?
我们可以使用~
然后用...
获取元素,然后应用函数
pmap_dbl(x, ~ var(c(...)))
行为不同的原因是 mean
和 var
中的参数数量不同。在mean
中,对象x
之后,其他参数进入...
,而在var
中,不是这样,有x
,有y
等