首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从for循环中保存输出列表

如何从for循环中保存输出列表
EN

Stack Overflow用户
提问于 2014-11-29 20:05:47
回答 2查看 1.8K关注 0票数 1

我有名为datres的列表,每个列表包含33个数据集。Iam使用这样的for loop运行全局最小方差组合:

代码语言:javascript
复制
for(i in dat) {
N <- ncol(i)
Amat <- t(rbind( rep(1,N), diag(rep(1,N)), diag(rep(-1,N))))
bvec <- c(1 , rep(0,N), rep(-0.15,N))
Dmat <- cov.shrink(i) #from tawny package 
dvec <- rep(0,N)
mvw <- solve.QP( Dmat, dvec, Amat, bvec, meq = 1 )$solution #from quadprog package
names(mvw) = colnames(i)
}

它的工作,但只节省了最后的迭代当然。我不知道怎么把他们全部救出来。我需要将所有33个mvw结果保存在一个列表中。我该怎么做呢?

之后,我必须使用等效的mvw数据集来评估res的结果:

mvwreturns = res%*%matrix(mvw,ncol=1)

此命令为我提供每个期间的portfolio评估。每个mvw数据与一个res数据集匹配。我该怎么做?我想知道我是否需要运行另一个for loop

任何帮助都是非常感谢的。为我糟糕的英语感到抱歉。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-29 20:39:13

您可以执行以下操作:

在循环之前启动一个空列表mvw。然后将每个数据集添加为列表中的新元素:

代码语言:javascript
复制
mvw <- NULL #initiate list
counter <- 1
for(i in dat ) { 
N <- ncol(i)
Amat <- t(rbind( rep(1,N), diag(rep(1,N)), diag(rep(-1,N))))
bvec <- c(1 , rep(0,N), rep(-0.15,N))
Dmat <- cov.shrink(i) #from tawny package 
dvec <- rep(0,N)
mvw[[counter]] <- solve.QP( Dmat, dvec, Amat, bvec, meq = 1 )$solution) #from quadprog package
#for each iteration mvw will be stored as the i-th element in a list
names(mvw[[counter]]) = names(i)
counter <- counter + 1
}

然后再做一个小循环,和以前一样,做你想做的事情:

代码语言:javascript
复制
mvwreturns <- NULL
for ( i in 1:length(mvw) {
      mvwreturns[i] = res[i]%*%matrix(mvw[i],ncol=1)
}

对不起,我没有任何数据来运行您的脚本,但是您知道了。

希望能帮上忙。

票数 1
EN

Stack Overflow用户

发布于 2014-11-29 20:14:29

不要使用for-循环,而要查看mapply。将您希望在每个条目上运行的代码保存到返回mvw的函数中,将datres推到带有上述函数的mapply调用中,它应该从datres中分离出每个元素的结果集列表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27206542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档