重新运行函数并将输出保存到以后的绘图?
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
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