【发布时间】:2021-07-14 14:50:43
【问题描述】:
我有一个嵌套的 for 循环
我正在尝试这样做,以便嵌套 for 循环的多次迭代
for 循环的结尾如下所示:
|reps| MAD|
|:--:|:---|
|5 | 23|
|10|21|
|20|19|
|30|17|
|40|15|
|50|12|
在每次新的迭代中,我希望它添加一列,使其看起来像这样:
|reps| MAD|MAD2|
|:--:|:---|:----|
|5 | 23| 25|
|10|21|22.5|
|20|19|20|
|30|17|19|
|40|15|17|
|50|12|15|
out <- list()
output <- list()
i <- 1
for(patient in c("P01", "P02", "P03", "P04", "P05")){
for(period in c("SBP", "Laser_Mean")){
for(reps in c(5,10,20,30,40,50)){
for(isim in 1:20){
print(reps)
db_temp <- db_s_abs_fix%>%
filter(Patient==patient)%>%
filter(Period==period)%>%
group_by(Patient, Target_num, Period, Type)%>%
sample_n(reps, replace=TRUE)
last_delay <- matt_predict(db_temp)
print(patient)
print(period)
print(reps)
print(last_delay$delay)
out[[i]] <- data.frame(patient=patient, period=period, reps=reps, delay=last_delay$delay, isim=isim)
i <- i+1
}
}
}
out <- bind_rows(out)
d_bp02 <- out%>%
filter(period == "SBP")%>%
dplyr::select(patient,
reps,
AV_BP = delay)
d_laser02 <- out%>%
filter(period == "Laser_Mean")%>%
dplyr::select(patient,
reps,
AV_Laser = delay)
d_final02 <- full_join(d_bp02, d_laser02)%>%
group_by(reps)%>%
mutate(av_diff = AV_Laser - AV_BP,
abs_av_diff = abs(av_diff))
d_final_mad <- d_final02%>%
group_by(reps)%>%
summarise(med_av_diff = median(av_diff),
med_abs_av_diff = median(abs(av_diff)),
MAD = median(abs(av_diff - med_av_diff)))
d_final_mad <- d_final_mad%>%
group_by(reps)%>%
dplyr::select(reps,MAD)
output[[i]] <- d_final_mad
i <- i+1
}
output <- do.call(cbind,output)
我试过了:
output <- do.call(cbind,output)
stats <- foreach(i = 1:5, .combine=data.frame) %do% {
output(i)
}
do.call(cbind, lapply(output, as.data.frame))
以上方法无效
for (i in 1:5) {
d_final_mad$i <- i #to keep track of which iteration produced it
output[[i]] <- d_final_mad # add it to your list
}
这个只给了我5次相同的结果
【问题讨论】:
-
嗨,这让我很困惑。你有一个你开始的数据框吗?还是一组向量?为什么要使用这么多 for 循环来执行此操作?
-
能否请您做一个显示问题的最小示例。我们不知道
db_s_abs_fix是什么,我们不知道matt_predict()是什么。有很多打印语句。我不知道isim来自哪里,或者你为什么使用i。如果问题是您以某种方式获取数据框列表并想要绑定它们,那么您可以使用bind_rows()。
标签: r for-loop nested-loops data-manipulation