【问题标题】:Calling var() from purrr's pmap() returns NA从 purrr 的 pmap() 调用 var() 返回 NA
【发布时间】:2018-05-18 17:55:55
【问题描述】:

我正在尝试使用 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

我错过了什么?

【问题讨论】:

    标签: r tidyverse purrr pmap


    【解决方案1】:

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

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

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

    【讨论】:

    • 哈!回答的速度比我刷新的速度快(并且比我接受答案的速度更快)。我知道~。我应该知道...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多