首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R quadprog错误:(列表)对象不能被强制为类型'double‘

R quadprog错误:(列表)对象不能被强制为类型'double‘
EN

Stack Overflow用户
提问于 2014-10-03 12:41:02
回答 2查看 21.5K关注 0票数 2

我对R的理解正在前进,但在投资组合优化方面,我遇到了另一个障碍。我有一个程序可以输出资产组合的.csv文件。第一个是投资组合的方差/协方差矩阵: covar.csv,第二个是资产的预期收益: fwdCost.csv。我试图将收益设置为-2,200,000最小化投资组合的风险(权重必须在0到1之间)。我想我的问题与我的.csv文件有关,但我不明白为什么solve.QP不喜欢它们。

代码语言:javascript
复制
> library(quadprog)
> dmat<-read.csv(file="C:/Users/Desktop/RFrontier/covar.csv", head=TRUE, sep=",")
> dvec<-matrix(0, 1,length(dmat))
> amat<-read.csv(file="C:/Users/Desktop/RFrontier/fwdCost.csv", header=TRUE, sep=",")
> amat<-t(amat)
> x<-matrix(0, length(dmat), length(dmat))
> diag(x)<-1
> amat<-cbind(amat,x)
> x<--x
> amat<-cbind(amat,x)
> bvec<-c(-2200000, rep(0, length(dmat)), rep(-1,length(dmat)))
> solve.QP(dmat, dvec, amat, bvec)

产生此错误: solve.QP(dmat,dvec,amat,bvec)中的错误:(列表)对象不能被强制为类型'double‘

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-03 12:53:32

问题出在amatdmat --它们不是矩阵,而是data.frames。使用:

代码语言:javascript
复制
# after reading them into R
amat <- as.matrix(amat)
dmat <- as.matrix(dmat)

然后你可以转置,还有其他任何你想要的。

您可以通过以下任一操作来确认这是错误的来源:

代码语言:javascript
复制
is(amat)
is.data.frame(amat)
is.matrix(amat)

as.numeric(amat) 
## This should give you a similar error to the one you are seeing. 
票数 8
EN

Stack Overflow用户

发布于 2016-06-27 05:53:27

你可以使用'unilist',比如

代码语言:javascript
复制
as.numeric(unlist(amat) 
票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26173371

复制
相关文章

相似问题

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