代码之家  ›  专栏  ›  技术社区  ›  Richard Herron

从purr的pmap()调用var()返回NA

  •  3
  • Richard Herron  · 技术社区  · 6 年前

    我正在尝试使用 pmap() purrr 包来简化我的代码。

    我有一个向量列表 x ; 所有向量的长度都相同。我想找出列表中所有向量的所有n个元素的均值和方差。也就是说,我想要所有第一个元素,所有第二个元素的均值和方差,依此类推。

    tidyverse ,我会皈依 十、 到矩阵并使用 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() 可以代替 应用() 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 回复  |  直到 6 年前
        1
  •  4
  •   akrun    6 年前

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

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

    产生不同行为的原因在于 mean var 在里面 意思是 ,在对象之后 x ,其他参数进入 ... ,在 变量 事实并非如此,事实的确如此 十、 y