r - 使用 purrr 的 R 多个循环,其中输出是数据表/小标题/矩阵
问题描述
rc<-1 # the number of red balls
wc<-1 # the number of white balls
red<-rep("Red",rc)
white<-rep("White",wc)
jar<-c(red,white)
nb<-5 ### number of draws
N=10 # Number of experiments
new_data<-matrix(NA,nrow = N,ncol = nb+1)
count_red_new<-matrix(NA,nrow = N,ncol = nb)
red_count<-rep(NA,N)
#### nested loop
for(i in 1:N){
for(j in 1:nb){
new_data[i,j]<-sample(jar,1,replace = T)
if(new_data[i,j]=="Red"){
count_red_new[i,j]=1
}else{
count_red_new[i,j]=0
}
red_count[i]=sum(count_red_new[i,])
new_data[i,nb+1]=red_count[i]
}
}
colnames(new_data)<-c("Draw1","Draw2","Draw3","Draw4","Draw5","Red Ball Count")
new_data<-data.frame(new_data)
#new_data$Red.Ball.Count<-as.integer(new_data$Red.Ball.Count)
new_data
上面的代码用于运行一个关于在 5 次平局中拉红球和白球的实验。这个实验进行了 10 次迭代。如上所述,我在两者之间使用了嵌套循环。如何将 purrr 用于嵌套循环,以便输出可以存储在矩阵或数据框中?
解决方案
这是一种使用map
. 如果你只有红球和白球,你可以利用rbinom()
平局。假设平局 1 是红球。
library(tidyverse)
nb <- 1:5
n <- 10
nb %>%
set_names(paste0("draw", .)) %>%
map_df(~rbinom(n, 1, prob = .5)) %>%
rowwise() %>%
mutate(red_ball_count = sum(c_across(everything())))
# A tibble: 10 x 6
# Rowwise:
draw1 draw2 draw3 draw4 draw5 red_ball_count
<int> <int> <int> <int> <int> <int>
1 1 1 1 0 0 3
2 0 1 0 0 1 2
3 0 0 0 1 1 2
4 0 0 0 1 1 2
5 1 0 0 0 0 1
6 1 0 1 0 1 3
7 1 0 1 1 1 4
8 0 0 1 0 1 2
9 1 1 0 1 0 3
10 0 1 0 1 1 3
请注意,这在技术上执行 5 轮 10 次平局,而不是 10 轮 5 次平局。如果你真的想做 10 轮 5 次平局,也是一样的想法,但是你需要用t()
.
FWIW 这是一个基本的 R 方法:
df <- data.frame(t(replicate(n, rbinom(nb, 1, prob = .5))))
colnames(df) <- gsub("X", "Draw", colnames(df))
df['red_ball_count'] <- rowSums(df)
最后,考虑到该顺序(通常)在伯努利试验中并不重要,请注意,您可以通过指定and单独获得red_ball_count
with :rbinom()
n=10
size=5
rbinom(n, nb, prob = .5)
推荐阅读
- gitlab - Gitlab CI在推送到master时运行两次测试
- wordpress - Wordpress/Elementor 网站在 Chrome 上速度极快,但在 Mac 上的 Safari 上滞后
- sql - Laravel 迁移:在新列中组合多个值
- c++ - MFC MDI 设计用户首选项对话框 GUI 布局功能
- html - 在 Rmarkdown 中显示大图
- mysql - 有没有办法以 YYYYMMDDHHMMSS 而不是 YYYY-MM-DD HH:MM:SS 格式在 MySQL 8 中获取 CURRENT_TIMESTAMP?
- c# - 向 C# POST 请求添加 json 值
- c++ - 使用处理器标志编译 C++ 代码会使代码变慢(英特尔编译器)
- rust - Typestate 结构图关系
- python - Python 正则表达式在同一语句中同时包含多行和单行