这个简单的for循环有什么不对?

时间:2014-07-14 17:35:16

标签: r for-loop

我对这个简单的循环感到很困惑。为什么它不起作用?

set.seed(123)
out1<-data.frame(y1=rbinom(10, 1, 0.3),
                y2=rbinom(10, 1, 0.4),
                y3=rbinom(10, 1, 0.5),
                y4=rbinom(10, 1, 0.6))

out<-NULL

for(i in 1:10){
  out[i, ]<-out1[i, ]
}
Error in out[i, ] <- out1[i, ] : incorrect number of subscripts on matrix

2 个答案:

答案 0 :(得分:1)

我宁愿绕过列表,因为使用for循环创建矩阵会变得非常麻烦(参见例如Stepwise creation of one big matrix from smaller matrices in R for-loops)。因此,我的解决方案是:

# Prepare emtpy list:
out <- list()

for(i in 1:10){
   # Store everything in list:
   out[[i]]<-out1[i, ]
   # Bind elements rowwise into matrix:
   Z <- do.call(rbind, out)
 }

这将为您提供矩阵Z作为输出,与原始矩阵out1相同。您可以通过调用identical(out1, Z)来验证这一点,TRUE如果out1Z相同,则输出{{1}}。

答案 1 :(得分:1)

这是修复代码而无需使用out 10x4预分配dim()的方法。但请注意,使用rbind()是一种非常低效的代码编写方式。你应该预先分配。

out1<-data.frame(y1=rbinom(10, 1, 0.3),
                 y2=rbinom(10, 1, 0.4),
                 y3=rbinom(10, 1, 0.5),
                 y4=rbinom(10, 1, 0.6))

out<-NULL

for(i in 1:10){
  out <- rbind(out, out1[i, ])
}