r - 如何在 R 中使用 for 循环来创建累积计数器向量?
问题描述
我有这个代码:
N=5
RowNum <-c(1:N)
Prob <- c(0.5,0.3,0.8,0.2,0.9)
Attempts <- c(rep(0,N))
Succeeded <- c(rep(0,N))
Overall <- data.frame(RowNum,Prob,Attempts,Succeeded)
set.seed(1)
addone <- function(vec) {
vec$Attempts <- vec$Attempts + 1
if(runif(1) < vec$Prob) {
vec$Succeeded <- vec$Succeeded + 1
} else {
vec <- addone(vec)
}
vec
}
make.new.df <- function(df) {
for(i in 1:nrow(df)) {
df[i, ] <- addone(df[i, ])
}
df
}
df1 <- make.new.df(Overall)
df1
这是使用 set.seed(1) 的输出
RowNum Prob Attempts Succeeded
1 1 0.5 1 1
2 2 0.3 4 1
3 3 0.8 3 1
4 4 0.2 2 1
5 5 0.9 1 1
我想创建一个循环,通过插入一个 N 然后这段代码将运行 N 次。例如 - 让我们设置 N=100,输出应该如下所示(使用 set.seed(1)):
RowNum Prob Attempts Succeeded
1 1 0.5 100 100
2 2 0.3 400 100
3 3 0.8 300 100
4 4 0.2 200 100
5 5 0.9 100 100
我会感谢你的帮助!
解决方案
我不会使用递归函数,因为如果你N
变大,它可能会产生问题。使用while
循环你可以尝试:
make.new.df <- function(df, success_n) {
for(i in seq_len(nrow(df))) {
count <- 0
prob <- df$Prob[i]
success <- df$Succeeded[i]
while (success < success_n) {
if(runif(1) < prob) success <- success + 1
count <- count + 1
}
df$Succeeded[i] <- success
df$Attempts[i] <- count
}
return(df)
}
df1 <- make.new.df(Overall, 10)
df1
# RowNum Prob Attempts Succeeded
#1 1 0.5 22 10
#2 2 0.3 37 10
#3 3 0.8 11 10
#4 4 0.2 20 10
#5 5 0.9 11 10
df1 <- make.new.df(Overall, 100)
df1
# RowNum Prob Attempts Succeeded
#1 1 0.5 183 100
#2 2 0.3 379 100
#3 3 0.8 127 100
#4 4 0.2 423 100
#5 5 0.9 111 100
推荐阅读
- css - 页面上不再显示 Font Awesome 图标
- python - 通过从 Zap B 传递 POST 函数来触发 Zap A
- swift - 如何检查结构的实例本身是否是另一个结构的实例
- powershell - 将变量传递到 sql loader ctrl 文件中
- javascript - 使用两个数组排序
- javascript - 从数组中提取图像索引以便将图像插入引导轮播
- gradle - Gradle 多模块项目未在其中一个模块中运行测试
- html - Ruby on rails:如何显示另一个表中的信息?
- python - Python 无法连接到 grpc 通道->“无法连接到所有地址”“grpc_status”:14
- coldfusion - cfmail 拒绝样式声明