在循环中添加 xts 对象
Posted
技术标签:
【中文标题】在循环中添加 xts 对象【英文标题】:Adding xts objects in a loop 【发布时间】:2021-09-28 04:16:24 【问题描述】:我有一个函数 ugmfit,它返回一个 xts 对象。 现在我想编写一个包含循环的函数 out_of_sample_f。在每次迭代的那个循环中 fit$est_vol_oos 给出一个具有唯一日期的 xts。我想将它们全部加在一起,以便 out_of_sample_f 可以返回所有预测中的一个 xts
如何在该循环中迭代地合并这些 xts,以便 out_of_sample_f 只返回一个 xts 对象?不知道我做的对不对?我在想,一开始就初始化 oosf 可能会出现日期问题。
out_of_sample_f <- function(rtrn, r_w, re_est_w, exog)
oosf = xts(as.numeric(0), as.Date("2013-04-08"))
for (i in 0:(length(rtrn) - r_w))
if(i%%re_est_w == 0)
mv_m<-mv_into_mat(rtrn[(i + 1):(i + r_w)],exog,K=12,"monthly")
fit<-ugmfit(model="GM",skew="NO",distribution="norm",rtrn[(i + 1):(i+r_w)],mv_m,K=12, out_of_sample = re_est_w)
oosf = c(oosf, fit$est_vol_oos)
oosf <- oosf[-1,]
return(oosf)
fit$est_vol_oos 是特定窗口的 xts。我想遍历我的数据并连续添加我的预测。
稍后我将这个“合并”xts 用于其他东西,其中构建了这个 xts 和另一个 xts 之间的差异,但我得到两个数组不兼容的错误。
编辑:
后来我使用这个 xts 形式的 out_of_sample_f 和一个原始的返回序列作为另一个函数的输入。那里说:
*.default
((tau - dummies), (realized - evaluate)) 中的错误:
不相容数组
realized 是原始返回序列,评估的是 out_of_sample_f 中的 xts。
【问题讨论】:
我编辑了问题 还不清楚。你要Reduce("+", lst1)
抱歉,问了很多问题。如果您创建了一个具有明确预期输出的可重现示例,我们就不必要求明确
好的,假设 a 是一个日期为“2021-07-19”的 xts,只有一列包含数字,b xts 的日期为“2021-07-20”,也只有一列.现在我想将 a 和 b 添加在一起,以便新的 xts 对象包含两行,即 a 和 b
add
我猜这并不是指基于日期的文字添加 (+
),对吧。如果这些对象之间有共同的日期怎么办。你是求和还是只保留第一个日期行
【参考方案1】:
如果我们想从list
到rbind
,请使用
do.call(rbind, lst1)
其中lst1
是存储在list
中的out_of_sample_f
的输出
在OP的代码中,有一行
oosf = c(oosf, fit$est_vol_oos)
应该是
oosf = rbind(oosf, fit$est_vol_oos)
out_of_sample_f <- function(rtrn, r_w, re_est_w, exog)
oosf = xts(as.numeric(0), as.Date("2013-04-08"))
for (i in 0:(length(rtrn) - r_w))
if(i%%re_est_w == 0)
mv_m<-mv_into_mat(rtrn[(i + 1):(i + r_w)],exog,K=12,"monthly")
fit<-ugmfit(model="GM",skew="NO",distribution="norm",rtrn[(i + 1):(i+r_w)],mv_m,K=12, out_of_sample = re_est_w)
oosf = rbind(oosf, fit$est_vol_oos)
oosf <- oosf[-1,]
return(oosf)
【讨论】:
所以不是 oosf = c(oosf, fit$est_vol_oos),而是在每次迭代中将 fit$est_vol_oos 附加到列表中?如何附加到列表?所以我发起 oosf = list()? @JohannesHeß 如果您已经在这样做而不是c
,请使用 oosf <- rbind(oosf, ..
rbind 与 c 有何不同?
@JohannesHeß 对于矩阵输出,c
删除了 dim
属性,而 rbind
没有。即c(matrix(1:10, 2, 5))# [1] 1 2 3 4 5 6 7 8 9 10
我认为这行得通!非常感谢你 akrun :-)以上是关于在循环中添加 xts 对象的主要内容,如果未能解决你的问题,请参考以下文章