【发布时间】:2021-01-29 17:25:59
【问题描述】:
我在从某些电极的贝叶斯处理中提取的列表中有某些数据,我想从循环中填充数据帧。首先,我有一个包含 729 个处理结果的列表和一个对象elecs,如您所见,它基本上是一个包含 729 对电极 (27*27) 的列表。
> head(elecs)
X Elec1 Elec2
1 1 1 1
2 2 1 2
3 3 1 3
4 4 1 4
5 5 1 5
6 6 1 6
问题是我想用这个循环的结果填充dataf1,它恰好是一个 4000 行的数据框。
dataf1 <- data.frame('Elec1'=rep(NA,4000*729),'Elec2'=rep(NA,4000*729),'int'=rep(NA,4000*729))
for (i in nrow(elecs)){
Elec1=as.data.frame(rep(elecs[i,]$Elec1,4000))
Elec2=as.data.frame(rep(elecs[i,]$Elec2,4000))
post <- posterior_samples(bayeslist[[i]])
int <- as.data.frame(post$b_Intercept)
df <- cbind(Elec1,Elec2,est)
colnames(df) <- c('Elec1','Elec2','int')
dataf1[(1+(i-1)*4000):((1+(i-1)*4000)+3999),c('Elec1','Elec2','int')] <- df
}
在循环中的最后一行之前一切正常:
dataf1[(1+(i-1)*4000):((1+(i-1)*4000)+3999),c('Elec1','Elec2','int')] <- df
而且我不知道为什么这不能按预期工作并填充 dataf1 预初始化数据帧。
一如既往,我们将高度赞赏任何见解。
【问题讨论】:
-
你的最后一行有一个令人讨厌的错字,即你缺少一个右括号!而不是
dataf1[(1+(i-1)*4000):((1+(i-1)*4000)+3999),c('Elec1','Elec2','int'] <- df,你应该有dataf1[(1+(i-1)*4000):((1+(i-1)*4000)+3999),c('Elec1','Elec2','int')] <- df。但我不确定这是唯一的错误。 -
你是对的,但是不,这不是错误,我已经修复了它,但它仍然没有填充它。不过谢谢,我正在编辑帖子。