重新运行函数并将输出保存到以后的绘图?

Rerun function and save outputs to later plot?

R 的新手,需要一些指导、帮助或解决方案!

我的实际数据集很大,所以我有这个包含两列的示例数据集,如下所示:

plot<- c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3)
ID<- c("S","S","S","C","T","S","SP","T", "C", "T","S","SP","T","S","C")
dat<- data.frame(plot,ID)

我正在尝试从每个地块随机删除一个条目,计算每个 ID 的频率,从每个地块随机删除另一个条目,计算频率并继续重复。

到目前为止,在一些帮助下,我能够使用以下方法从每个图中随机删除一个条目

dat %>%
  group_by(plot) %>%
  sample_n(n() - 1) %>%
  ungroup()

我可以用它来计算每个 ID 的出现频率

dat %>%                               
  group_by(ID) %>%
  summarise(n = n()) %>%
  mutate(freq = n / sum(n))

我需要能够冲洗和重复这两个功能,并每次都查看结果。这个数据集只有15个变量,但我的实际数据集要大很多,所以不断写出100多次似乎效率很低。

是否可以一起循环或重新运行这两个函数并每次产生一个输出 x 次?例如,对于我提供的样本数据,总共可能是 4 次。我尝试了“for”循环,但我无法让它工作(很可能是我的用户错误)

感谢您的帮助!

将两个操作组合在一个函数中,并使用 map 以不同的 p 值调用它。

library(dplyr)

run_sample <- function(dat, p) {
  dat %>%
    group_by(plot) %>%
    sample_n(n() - p) %>%
    ungroup() %>%
    count(ID) %>%
    mutate(freq = n / sum(n))
}

set.seed(123)
purrr::map(seq(n_distinct(dat$ID)), run_sample, dat = dat)

这是 returns 小标题列表。

result

#[[1]]
# A tibble: 4 x 3
#  ID        n  freq
#  <chr> <int> <dbl>
#1 C         2 0.167
#2 S         5 0.417
#3 SP        2 0.167
#4 T         3 0.25 

#[[2]]
# A tibble: 3 x 3
#  ID        n  freq
#  <chr> <int> <dbl>
#1 C         1 0.111
#2 S         6 0.667
#3 T         2 0.222

#[[3]]
# A tibble: 3 x 3
#  ID        n  freq
#  <chr> <int> <dbl>
#1 S         2 0.333
#2 SP        2 0.333
#3 T         2 0.333

#[[4]]
# A tibble: 2 x 3
#  ID        n  freq
#  <chr> <int> <dbl>
#1 C         1 0.333
#2 S         2 0.667