2017-07-11 16 views
4

私は最近quadprogパッケージからsolve.QPを呼び出すスクリプトを削除しました(私は現在バージョン1.5-5を持っています)。これで、 "object '.QP_qpgen2' not found"というエラーが生成されます。なぜか分からない。quadprogで '.QP_qpgen2'が見つからないのはなぜですか?

このオブジェクトは私によっては作成されませんが、quadprogのsolve.QP関数によって作成されます。 GithubのQuadprog.Rで コード(ライン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)) 

エラーがsolve.QPためdocumentationから採取されたコードから生成することができる。

## 
## 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) 

Iは、R v3.4.1を使用していそれが助けば。

+1

私は同じ問題を抱えています。私が知る限り、R 3.4にはFortranでルーチンを登録する新しい方法があります(https://cran.r-project.org/doc/manuals/r-release/R-exts.html#Registering-native-ルーチン)。 quadprogパッケージはまだ更新されていません。 – pbr142

答えて

5

私のコメントで述べたように、R 3.4には外部ルーチンを登録する新しいメソッドがあります。 QuadprogはFortranルーチンに依存しています。 これを解決するには、現在のRtoolsを使用してR 3.4のソースからパッケージをビルドする必要があります。 Rtoolsがインストールされ、セットアップされている必要があります(使用しているシステムに合わせてRtoolsを設定する方法については、Google検索でガイドが表示されます)。その後、quadprogパッケージのCRANページに行き、ソースファイルquadprog.tar.gzをダウンロードしてください。最後に、コマンドを実行してください

install.packages("PATH_TO_FILE/quadprog_1.5-5.tar.gz", repos = NULL, type="source", INSTALL_opts = "--merge-multiarch") 

または、数日待つことができます。私は確かに、CRANのパッケージはすぐに更新されます。私はこの問題についての電子メールを取得しておくと

1

使用packageDescription("quadprog")は、あなたのインストールパッケージが構築されたRのバージョンの下に表示します。

バージョンが3.3.x(またはそれ以前)の場合は、update.packages(checkBuilt=TRUE)を使用して、バージョンをR 3.4.xで構築されたバージョンに更新します。

関連する問題