【问题标题】:Passing vector and single values to function with pmap将向量和单个值传递给 pmap 函数
【发布时间】:2017-02-12 18:39:40
【问题描述】:

咕噜声弄湿了我的脚。

我正在评估 beta 分布的不同参数组合,并尝试传递 x 值的向量和分布的参数。

请看下面的代码:

library(tidyr)
library(purrr)
library(dplyr)

x <- seq(0.01, 0.99, 0.01)
alpha <-  c(0.1, 0.5, 1:5, 10)
beta <-  c(0.5, 1, 2, 5)


df <- expand.grid(alpha = alpha, beta = beta, x = x) %>% 
  nest(x) %>%
  mutate(plotdata = pmap(list(data$x, alpha, beta), dbeta)) %>%
  unnest()

在这种情况下,pmap 的正确语法是什么?

【问题讨论】:

    标签: r purrr


    【解决方案1】:

    我们以第一种情况为例。

     x = 0.01
     alpha = 0.1
     beta = 0.5
    
    dbeta(shape1 = alpha, shape2 = beta, x = x)
    # [1] 5.600381
    

    第二个例子是:

    x = 0.01
    alpha = 0.5  
    beta = 0.5 
    
    dbeta(shape1 = alpha, shape2 = beta, x = x)
    # [1] 3.199135
    

    如果这是您期望的输出,那么我们可以对其进行概括:

    x <- seq(0.01, 0.99, 0.01)
    alpha <-  c(0.1, 0.5, 1:5, 10)
    beta <-  c(0.5, 1, 2, 5)
    
    df <- expand.grid(alpha = alpha, beta = beta, x = x)
    
    args_beta <- with(df, list(x = x, shape1 = alpha, shape2 = beta))
    args_beta %>% 
      pmap(dbeta) %>% 
      unlist() %>% 
      as.data.frame() %>% 
      cbind(df, .)
    

    那么输出将是:

    alpha beta    x            .
    1   0.1  0.5 0.01 5.600381e+00
    2   0.5  0.5 0.01 3.199135e+00
    3   1.0  0.5 0.01 5.025189e-01
    4   2.0  0.5 0.01 7.537784e-03
    5   3.0  0.5 0.01 9.422230e-05
    6   4.0  0.5 0.01 1.099260e-06
    

    【讨论】:

    • 谢谢!但这并没有给我我需要的东西。结果应该是一个有 3168 行的数据框 = length(x) * length(alpha) * length(beta)
    • 如果您花时间回答问题,请更进一步并解释它,不仅可以帮助 OP,还可以帮助其他可能遇到相同问题的人。请记住,并非每个人都有相同的背景和理解。您的问题被标记为low quality,请花点时间改进。
    猜你喜欢
    • 1970-01-01
    • 2015-08-07
    • 2011-12-02
    • 2013-09-02
    • 2012-01-07
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    • 2019-06-10
    相关资源
    最近更新 更多