gpt4 book ai didi

r - purrr 结合 pmap 和 nest

转载 作者:行者123 更新时间:2023-12-05 03:02:18 31 4
gpt4 key购买 nike

我正在尝试学习 purrr 以在每次迭代中使用具有不同均值、sd 和 n 的 rnorm 来模拟数据。此代码生成我的数据框:

parameter = crossing(n = c(60,80,100),   
agegroup = c("a", "b","c"),
effectsize = c(0.2, 0.5, 0.8),
sd =2
) %>%
# create a simulation id number
group_by(agegroup) %>%
mutate(sim= row_number())%>%
ungroup() %>%
mutate(# change effect size so that one group has effect, others d=0
effectsize= if_else(agegroup == "a", effectsize, 0),
# calculate the mean for the distribution from effect size
mean =effectsize*sd)

现在我想遍历不同的模拟,对于每一行,使用 rnorm 根据均值、sd 和 r 生成数据

# create a nested dataframe to iterate over each simulation and agegroup
nested_df = parameter %>%
group_by(sim, agegroup, effectsize)%>%
nest() %>% arrange(sim)

这就是我的数据框的样子: picture of dataframe

现在我想用“数据”列中给出的均值、sd 和 n 创建正态分布的数据

nested_df = nested_df %>%  
mutate(data_points = pmap(data,rnorm))

但是上面的代码给出了一个错误,我一直无法找到解决方案:

Error in mutate_impl(.data, dots) : 
Evaluation error: unused arguments

我阅读了 R for Data Science 中的 Iteration chapter 并在 google 上搜索了一堆,但我不知道如何结合 pmap 和 nest。我想使用这些函数的原因是它可以更容易地将参数、模拟数据和输出全部保存在一个数据帧中。

最佳答案

您不一定需要嵌套参数。例如:

parameter %>%
# Use `pmap` because we explicitly specify three arguments
mutate(data_points = pmap(list(n, mean, sd), rnorm))
# A tibble: 27 x 7
# n agegroup effectsize sd sim mean data_points
# <dbl> <chr> <dbl> <dbl> <int> <dbl> <list>
# 1 60 a 0.2 2 1 0.4 <dbl [60]>
# 2 60 a 0.5 2 2 1 <dbl [60]>
# 3 60 a 0.8 2 3 1.6 <dbl [60]>

有了嵌套数据框,你可以使用map而不是pmap:

nested_df %>%
# Use `map` because there is really one argument, `data`,
# but then refer to three different columns of `data`.
mutate(data_points = map(data, ~ rnorm(.$n, .$mean, .$sd)))

关于r - purrr 结合 pmap 和 nest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54963958/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com