0

我听说并读到在 R 中使用for循环而不是while循环有显着的速度优势。如果是这种情况,我想尽可能多地使用 for 循环。然而,我有不平衡的面板数据(一些横截面数据比其他数据记录的观察更多)。所以我需要在横截面之间跳过的观察数量上灵活的循环。例如,我可能有一个家庭观察了 2 年,而另一个家庭观察了 4 年。这是一些简单的代码,说明了我的意思:

set.seed(123456)
##25 cross-sectional units with varying number of yearly observations
m1 <- matrix(c(rnorm(60),rep(2,20),rep(4,20), rep(2,20), 
               rep(seq(10), each=2) , rep(seq(11,15), each = 4), 
               rep(seq(16,25), each = 2)), ncol=3)
##colnames(m1) <- c("x1", "#_of_Obs", "Panel_ID")
v1 <- as.numeric()
v2 <- as.numeric()
id1 <- as.numeric()
id2 <- as.numeric()

for(i in 1: (nrow(m1))){
  counter <- m1[i, 2]
  v1 <- c(v1,i)
  id1 <- c(id1, m1[i,3])
  i <- i + counter
}

i <- 1
while(i <= (nrow(m1))) {
  counter <- m1[i, 2]
  v2 <- c(v2,i)
  id2 <- c(id2, m1[i,3])
  i <- i + counter
}     

v1; id1 # for loop inaccurate
v2; id2 # while loop accurate

是不是因为in命令for循环不起作用?如果不是这样,我该如何改变 for 循环工作?另外,for/while 循环之间的速度差异是否被夸大了?我知道在琐碎的数据中这并不重要,但我正在处理真实数据和成千上万的观察结果。

4

0 回答 0