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