如何用purrr将pmap生成的Beta密度结果存入数据框嵌套列?
没问题,这事儿用purrr配合dplyr的嵌套操作就能轻松搞定。我给你一步步拆解实现过程:
首先,咱们先把生成Beta密度的函数定义好——这个函数接收a和b两个参数,输出包含x值和对应密度的小数据框:
library(tidyverse) # 加载tidyverse,包含purrr和dplyr # 定义生成Beta密度数据的函数 gen_den <- function(a, b) { tibble( x = seq(0, 1, length.out = 100), # 生成0到1之间的100个等距点 density = dbeta(x, shape1 = a, shape2 = b) # 计算Beta密度 ) }
接下来,准备你的参数数据框params,假设它长这样(你可以替换成自己的实际数据):
# 示例参数数据框 params <- tibble( a = c(2, 5, 10), b = c(2, 5, 2) )
现在关键的一步:用pmap(或者针对双参数更简洁的map2)把每一行的a和b传给gen_den,并把结果嵌套到新的data列里:
方法1:用pmap(通用型,支持任意数量参数)
params_with_data <- params %>% mutate(data = pmap(list(a, b), gen_den))
方法2:用map2(针对两个参数的场景更直观)
params_with_data <- params %>% mutate(data = map2(a, b, gen_den))
完成后,params_with_data里的data列每个元素都是一个独立的小数据框,就是gen_den(a,b)的输出。你可以用params_with_data$data[[1]]查看第一组参数生成的密度数据,或者用unnest(data)把嵌套的数据展开查看。
举个验证的例子,打印第一行的data内容:
print(params_with_data$data[[1]]) #> # A tibble: 100 × 2 #> x density #> <dbl> <dbl> #> 1 0 0 #> 2 0.0101 0.0404 #> 3 0.0202 0.0808 #> 4 0.0303 0.121 #> 5 0.0404 0.161 #> 6 0.0505 0.201 #> 7 0.0606 0.240 #> 8 0.0707 0.279 #> 9 0.0808 0.317 #> 10 0.0909 0.354 #> # … with 90 more rows
这样就完全实现了你想要的效果——把每个参数组合生成的Beta密度数据嵌套到原参数数据框的一列中。
内容的提问来源于stack exchange,提问作者Demetri Pananos
相关产品推荐
相关产品推荐

