R 重复函数并记录每次运行的结果

R 重复函数并记录每次运行的结果,r,simulation,R,Simulation,我有一个函数,我想运行它多次,每次变量'draw'19增加1,一直增加到52。每次运行后,我想在“sim”上使用summary()记录结果,并将其放入df中。我想知道如何在这个场景中使用一个循环,这样我就不必每次都进去更改draw值并记录结果了? 预期结果: draw Min 1st Qu. Median Mean 3rd Qu. Max. 19 16 27 30 29.85 33 45 20 22 30 33 33

我有一个函数,我想运行它多次,每次变量'draw'19增加1,一直增加到52。每次运行后,我想在“sim”上使用summary()记录结果,并将其放入df中。我想知道如何在这个场景中使用一个循环,这样我就不必每次都进去更改draw值并记录结果了? 预期结果:

draw  Min  1st Qu. Median Mean    3rd Qu. Max.
19    16    27      30    29.85    33     45
20    22    30      33    33.13    37     50u
21
.
.
52

代码:


图书馆(dplyr)

是的,你有一些东西在工作,需要把它写进函数中

这部分代码只是查找有多少唯一id多次出现:

repeats <- all %>%
    group_by(id) %>%
    mutate(freq = n()) %>%
    filter(freq > 1) %>%
    n_distinct(id) %>%
    as.data.frame()
在不改变太多内容的情况下,您的函数将如下所示,我将“all”替换为all,因为“all”是R中的一个函数:

func = function(draw,d,n,n_runs){
       sim <- c()
       for (j in 1:n_runs) {
              ALL <- c()
              for (i in 1:draw) {
              srs <- sample_n(d, n, replace = FALSE)
              ALL <- bind_rows(ALL, srs)
              }
       repeats <- sum(table(ALL$id)>1)
       sim <- c(sim, repeats)
       }
       summary(sim)
}
应该给出与上面完全相同的结果。现在,您可以使用map应用此函数,仅更改draw:

library(purrr)
library(dplyr)
set.seed(123)
res = 19:22 %>% map(func,data.frame(id=1:2500),22,500)
cbind(19:22,do.call(rbind,res))
我没有跑完19:52,因为太慢了。。您可以尝试优化代码,而无需执行太多绑定行:)希望这就是您所需要的

func = function(draw,d,n,n_runs){
       sim <- c()
       for (j in 1:n_runs) {
              ALL <- c()
              for (i in 1:draw) {
              srs <- sample_n(d, n, replace = FALSE)
              ALL <- bind_rows(ALL, srs)
              }
       repeats <- sum(table(ALL$id)>1)
       sim <- c(sim, repeats)
       }
       summary(sim)
}
set.seed(123)
func(19,data.frame(id=1:2500),22,500)
library(purrr)
library(dplyr)
set.seed(123)
res = 19:22 %>% map(func,data.frame(id=1:2500),22,500)
cbind(19:22,do.call(rbind,res))