4

我最近清理了一个从 quadprog 包中调用 solve.QP 的脚本(我目前的版本是 1.5-5)。现在它生成错误“找不到对象'.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文档中的代码生成:

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

如果有帮助,我正在使用 R v3.4.1。

4

2 回答 2

5

正如我在评论中所说,R 3.4 有一种注册外部例程的新方法。Quadprog 依赖于 Fortran 例程。为了解决这个问题,您需要使用当前的 Rtools 从 R 3.4 中的源代码构建包。您需要安装和设置Rtools(谷歌搜索将引导您获得如何为您使用的任何系统设置 Rtools 的指南)。然后,进入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 上的软件包很快就会更新。

于 2017-07-12T10:23:50.890 回答
1

当我不断收到有关此问题的电子邮件时:

用于packageDescription("quadprog")查看您安装的软件包是在哪个版本的 R 下构建的。

如果版本是 R 3.3.x(或更早版本),请使用update.packages(checkBuilt=TRUE)将您的版本更新为在 R 下构建的版本3.4.x

于 2017-11-28T11:41:50.200 回答