R quadprog错误:( list)对象无法强制键入' double'

时间:2014-10-03 04:41:02

标签: r optimization

我正在理解R,但是在投资组合优化方面我遇到了另一个问题。我有一个程序可以为一组资产吐出.csv文件。第一个是投资组合的方差/协方差矩阵:covar.csv,第二个是资产的预期收益:fwdCost.csv。我试图设置等于-2,200,000的回报最小化投资组合的风险(权重必须介于0和1之间)。我认为我的问题与我的.csv文件有关但我无法弄清楚为什么解决.QP不喜欢它们。

> 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)出错:   (list)对象不能被强制输入'double'

2 个答案:

答案 0 :(得分:8)

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

# after reading them into R
amat <- as.matrix(amat)
dmat <- as.matrix(dmat)

然后你可以转置,并且你也可以喜欢。

您可以通过以下任何方式确认这是错误的来源:

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. 

答案 1 :(得分:-3)

你可以使用'unilist',比如

as.numeric(unlist(amat)