2017-07-11 5 views
4

Ich habe vor kurzem ein Skript entstaubt, das solve.QP aus dem Quadprog-Paket aufruft (ich habe derzeit Version 1.5-5). Jetzt erzeugt es den Fehler "Objekt '.QP_qpgen2' nicht gefunden". Ich verstehe nicht warum.Warum wird '.QP_qpgen2' in Quadprog nicht gefunden?

Dieses Objekt wird nicht von mir, sondern von der Funktion solve.QP in Quadprog erstellt. Auf Github Quadprog.R hat den Code (Linie 117):

res1 <- .Fortran(.QP_qpgen2, 
       as.double(Dmat), dvec=as.double(dvec), 
       as.integer(n), as.integer(n), 
       sol=as.double(sol), lagr=as.double(lagr), 
       crval=as.double(crval), 
       as.double(Amat), as.double(bvec), as.integer(n), 
       as.integer(q), as.integer(meq), 
       iact=as.integer(iact), nact=as.integer(nact), 
       iter=as.integer(iter), work=as.double(work), 
       ierr=as.integer(factorized)) 

Der Fehler kann von dem von der documentation für solve.QP genommen Code generiert werden:

## 
## Assume we want to minimize: -(0 5 0) %*% b + 1/2 b^T b 
## under the constraints:  A^T b >= b0 
## with b0 = (-8,2,0)^T 
## and  (-4 2 0) 
##  A = (-3 1 -2) 
##   (0 0 1) 
## we can use solve.QP as follows: 
## 
Dmat  <- matrix(0,3,3) 
diag(Dmat) <- 1 
dvec  <- c(0,5,0) 
Amat  <- matrix(c(-4,-3,0,2,1,0,0,-2,1),3,3) 
bvec  <- c(-8,2,0) 
solve.QP(Dmat,dvec,Amat,bvec=bvec) 

Ich bin mit R V3.4.1 wenn das hilft.

+1

Ich habe die gleichen Probleme. Soweit ich das beurteilen kann, hat R 3.4 eine neue Methode, Routinen in Fortran zu registrieren (siehe https://cran.r-project.org/doc/manuals/r-release/R-exts.html#Registering-native- Routinen). Das Quadprog-Paket wurde noch nicht aktualisiert. – pbr142

Antwort

5

Wie in meinem Kommentar erwähnt, hat R 3.4 eine neue Methode, externe Routinen zu registrieren. Quadprog setzt auf Fortran-Routinen. Um dies zu beheben, müssen Sie das Paket aus Quelle in R 3.4 mit den aktuellen Rtools erstellen. Sie müssen die Rtools installiert und eingerichtet haben (Eine Google-Suche wird Sie zu einer Anleitung, wie Rtools für welches System Sie verwenden, einrichten). Gehen Sie dann auf die CRAN-Seite des quadprog-Pakets und laden Sie die Quelldatei quadprog.tar.gz herunter. Schließlich führen Sie den Befehl

Alternativ können Sie ein paar Tage warten. Ich bin mir sicher, dass das Paket auf CRAN bald aktualisiert wird.

1

Wie ich E-Mails zu diesem Thema wird immer:

Verwenden packageDescription("quadprog"), um zu sehen, unter denen Version von R Ihres installiertes Paket gebaut wurde.

Wenn die Version R 3.3.x (oder früher) lautet, verwenden Sie update.packages(checkBuilt=TRUE), um Ihre Version auf eine Version zu aktualisieren, die unter R 3.4.x erstellt wurde.

Verwandte Themen