【问题标题】:Optimizing the speed of loop in a xts format in R在 R 中优化 xts 格式的循环速度
【发布时间】:2020-10-09 00:59:30
【问题描述】:

我有一个像下面这样的 xts 结构的数据:

维度为 2298 行 30 列。 我想在每一行和每一列中做一个循环并将其存储在一个新的矩阵/数据框中。将 xts 数据视为变量 a,示例代码为:

for(i in 1:nrow(a)){
 b[i,1] <- a[i,1]
  for(j in 2:ncol(a)){
   b[i,j] <- ((1+a[i,j])^j/(1+b[i,j-1]))-1
  }
}

R 中的 for 循环真的很慢,我想知道如何加快这个功能。

【问题讨论】:

  • 试试这个; ta

标签: r performance loops for-loop


【解决方案1】:

我认为速度慢是因为在运行循环之前您没有为 b 分配内存,而且 R 使用矢量化操作,因此不需要 i 循环:

system.time({
  b <- matrix(0, nrow(a), ncol(a))
  b[,1] <- a[,1]
  for(j in 2:ncol(a)){
    b[,j] <- ((1+a[,j])^j/(1+b[,j-1]))-1
  }
})
#   user  system elapsed 
#      0       0       0 

数据:

#R-3.6.1 64bit Win10
set.seed(0L)
nr <- 2298L
nc <- 30L
library(xts)
a <- xts(matrix(rnorm(nr*nc), nr, nc), seq(Sys.Date()-nr, by="1 day", length.out=nr))

【讨论】:

    猜你喜欢
    • 2020-01-19
    • 2016-09-02
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    相关资源
    最近更新 更多