xts-带有日期的列表之间的子集循环

时间:2018-11-12 02:53:10

标签: r for-loop xts

我有以下日期列表

list_of_dates <- as.Date(c("2002-07-08",
               "2002-07-09",
               "2002-07-10",
               "2002-07-11"))

和下面的xts对象

> tsmom
                    _3          _6         _9        _12
2002-07-05 -0.08097534 -0.04842372 -0.2072821 -0.2794321
2002-07-08 -0.07335450 -0.04190741 -0.1987623 -0.2696833
2002-07-09 -0.05530222 -0.03595881 -0.2095236 -0.2617205
2002-07-10 -0.06106435 -0.03665648 -0.2147289 -0.2674964
2002-07-11 -0.07711360 -0.03323385 -0.2231438 -0.2835645
>

我正在尝试创建一个for循环,该循环首先计算从xts对象(2002-07-05)的开始日期到list_of_dates中的日期的协方差矩阵。然后,这些协方差矩阵将在另一个函数中使用,并将输出存储在矩阵中:

Optimal_weights <- matrix(data = NA, nrow = length(list_of_dates), ncol = 4, 
            dimnames = list(list_of_dates,c("C3", "C6", "C9", "C12"))) 

但是我不确定如何在开始日期和日期列表之间进行子集化。通常,当有两个日期和xts对象时,我会使用"/2002-07-08",但不适用于list_of_dates[[i]]。我也尝试插入

subset(tsmom, "2002-07-05" & list_of_dates[[i]])

这是我的for-loop票价:

for (i in 1:length(list_of_dates)) {
sigma[[i]] <- lwShrink(tsmom["/list_of_dates[[i]]"])$cov
Optimal_weights[[i,]] <- optimalPortfolio(Sigma = sigma[[i]],
               control = list(type = 'maxdiv', constraint = 'lo'))
}

解决方案

我找到了一个解决方案,方法是使用tsmom[paste("/",list_of_dates[i],sep="")]并更改循环,使其变为:

for (i in 1:length(list_of_dates)) {
Optimal_weights[i,] <- optimalPortfolio(Sigma = lwShrink(tsmom[paste("/",list_of_dates[i],sep="")])$cov,
control = list(type = 'maxdiv', constraint = 'lo'))
}

0 个答案:

没有答案