double for-loop计算矩阵

时间:2018-04-16 19:47:57

标签: r for-loop matrix vector

dataset <- matrix(rnorm(100), 20, 5)

我的数据集是100个退货的矩阵,在20天内有5个资产。 我想计算每个资产的平均回报率,在1:10行和11:20行之间。 然后,我希望将包含在两个向量中的返回值包含在列表中。

以下列表应包括在行1:10和11:20之间计算的两个返回向量。

returns <- vector(mode="list", 2) 

我已经实现了一个for循环,如下所述,仅在1:10之间计算返回的平均值。

assets <- 5
r <- rep(0, assets) # this vector should include the returns over 1:10
for(i in 1:assets){
  r[i] <- mean(data[1:10,i])
}
returns[[1]] <- r

我怎样才能管理这个for循环,以便计算11:20行之间的回报平均值?

我试过&#34;索引&#34;数据集的行,按以下方式。

time <- c(1, 10, 11, 20)

然后实现双重for循环,但长度不同。而且,在这种情况下,我遇到了管理矢量&#34; r&#34;的困难。因为,在这种情况下,我应该有两个向量,而不再像以前那样只有一个向量。

for(j 1:length(time){
    for(i in 1:assets){
      r[i] <- mean(data[1:10,i])
    }}
    returns[[1]] <- r

1 个答案:

答案 0 :(得分:2)

您甚至不需要for循环。您可以使用colMeans

returns <- vector(mode="list", 2) 
returns[[1]] <- colMeans(dataset[1:10,])
returns[[2]] <- colMeans(dataset[11:20,])

使用for循环,您的解决方案可能类似于以下

for(i in 1:assets){
  returns[[1]] <- c(returns[[1]], mean(dataset[1:10,i]))
  returns[[2]] <- c(returns[[2]], mean(dataset[11:20,i]))
}