Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中优化xts格式的循环速度_R_Performance_Loops_For Loop - Fatal编程技术网

在R中优化xts格式的循环速度

在R中优化xts格式的循环速度,r,performance,loops,for-loop,R,Performance,Loops,For Loop,我有一个数据结构为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 } } for(1中的i:nrow(a)){ b[i,1]我认为慢是因为在运行循环之前,您没有为b

我有一个数据结构为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
  }
}
for(1中的i:nrow(a)){

b[i,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 
system.time({
b试试这个;ta
#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))