2014-10-03 127 views
2

我對R的理解有所改變,但是當涉及到投資組合優化時,我遇到了另一個障礙。我有一個程序可以爲資產組合提取.csv文件。第一個是投資組合的方差/協方差矩陣:covar.csv,第二個是資產的預期回報:fwdCost.csv。我試圖將收益率設置爲-2,200,000,以最大程度地降低投資組合的風險(權重必須介於0和1之間)。我認爲我的問題與我的.csv文件有關,但我無法弄清楚爲什麼solve.QP不喜歡它們。R quadprog錯誤:(列表)對象不能被強制輸入'double'

> 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,艾,bvec): (列表)對象不能被強迫爲類型 '雙'

回答

8

的問題是與amatdmat - 它們不是矩陣,而是數據框架。 使用:

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

然後就可以轉,和whateverelse你想。

可以確認,這是錯誤的來源通過以下任一的:

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. 
+0

謝謝!那工作 – user3390169 2014-10-03 14:39:04

-3

您可以使用「unilist」,像

as.numeric(unlist(amat) 
相關問題