R如何使循环更快

R如何使循环更快,r,performance,loops,R,Performance,Loops,我有一个如下的代码,它包含两个循环。该代码读取每月的流量数据,并将其作为多重复制。循环太慢了。我想知道是否有其他方法可以加快速度 library(xlsx) library(data.table) a <- read.xlsx("streamflow.xlsx",sheetName = "Sheet1", header = TRUE) b=matrix(nrow=129792,ncol=17) b= data.frame(b) i=0 for (j in -11:1

我有一个如下的代码,它包含两个循环。该代码读取每月的流量数据,并将其作为多重复制。循环太慢了。我想知道是否有其他方法可以加快速度

library(xlsx)
library(data.table)

  a <- read.xlsx("streamflow.xlsx",sheetName = "Sheet1", header = TRUE)
  b=matrix(nrow=129792,ncol=17)
  b= data.frame(b)
  i=0

  for (j in -11:1236)
  {
   for (k in 1:104)
   {
    i=i+1
    j=j+12
    j[j > 1248] <-j-1248
    b[i,] <-a[j,]
   }
 }
库(xlsx)
库(数据表)

a 1248]我相信这是将双for循环转换为矢量化代码的正确方法。它会大大提高速度。此外,无需将
b
声明为矩阵并将其转换为data.frame,只需从
a
获取值即可

j_iter <- -11:1236
k_iter <- 1:104

k <- seq(12, length(k_iter) * 12, 12)
k <- rep(k, times=length(j_iter))

j <- rep(j_iter, each=length(k_iter))
j <- j + k
j[j > 1248] <- j[j > 1248] - 1248

b <- a[j,]

j_iter我只能看到两个循环。那么什么是
data.table
呢?你能
dput(head(b))
这样我们就可以看到数据和循环中发生了什么吗?也许有一种方法可以将它矢量化,
dput(head(a))
。帮我们帮你,给一个@Wen:不会真的有帮助。谢谢@csgroen。a正在读取每月的流量数据时间序列,如St1 St2。1913年8月1000 2000年9月1913年4000 5000,b是一个空矩阵,其中将填充多个重复的流量数据。我转换了b t数据帧,因为矩阵格式的循环中有错误。谢谢@dvantwisk。它似乎正在工作,而且速度非常快。