【问题标题】:Generating nested observations with purrr使用 purrr 生成嵌套观察
【发布时间】:2018-02-06 13:43:23
【问题描述】:

我想生成几个由数据框中的其他列参数化的密度。到目前为止,这里有一些代码:

library(tidyverse)

a = c(2,3,4)
b = c(10,11,10)

params = expand.grid(a, b)

bdens = function(a, b){
    dens =  dbeta(x = seq(0,1,0.01), shape1 = a, shape2  = b)
    return(dens)
  }

如何使用 purrr 和 dplyr 以我描述的方式创建嵌套观察?

【问题讨论】:

  • 您要应用哪个函数?类似pmap_dbl(setNames(params, c('x', 'size')), dbinom, prob = 0.5)
  • @akrun darn,我看到我写了二项式,我的意思是 beta。我会通过邮寄更改。
  • 使用哪个函数
  • @akrun dbeta 是 beta 密度
  • dbeta 有参数dbeta(x, shape1, shape2, ncp = 0, log = FALSE)。您提供的数据只有两个参数。是那些 shape1 和 shape2.. 我不清楚。

标签: r dplyr purrr


【解决方案1】:

如果我们为参数提供函数的参数名称,我们可以将其传递给pmap

library(purrr)
set.seed(24)
params$dbetacol <- pmap_dbl(c(list(x = rnorm(9)), 
              setNames(params, c('shape1', 'shape2'))), dbeta)

注意:这里创建 x 是因为 OP 没有提供有关“x”的详细信息

更新

根据OP的函数,我们可以在函数上应用pmap

lst <- pmap(setNames(params, c('a', 'b')), bdens)

返回 vectors 中的 list,其中 length 等于“参数”数据集的行数,即对于每行中的每对 shape 参数,计算分布的 beta 密度相同的“x”值,即 101 个元素 (seq(0, 1, 0.01))

length(lst)
#[1] 9
lengths(lst)
#[1] 101 101 101 101 101 101 101 101 101

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 2020-06-14
    • 1970-01-01
    • 2018-11-06
    相关资源
    最近更新 更多