为什么在 quadprog 中找不到“.QP_qpgen2”?
Why is '.QP_qpgen2' not found in quadprog?
我最近清理了一个从 quadprog 包调用 solve.QP 的脚本(我目前的版本是 1.5-5)。现在它生成错误 "object '.QP_qpgen2' not found"。我不明白为什么。
这个对象不是我创建的,而是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))
错误可以从 documentation for 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。
如我的评论所述,R 3.4 有一种注册外部例程的新方法。 Quadprog 依赖 Fortran 例程。
要解决这个问题,您需要使用当前的 Rtools 在 R 3.4 中从源代码构建包。您需要有 Rtools installed and setup (A google search will get you to a guide how to set-up Rtools for whatever system you are using). Then, go to CRAN page of the quadprog 软件包并下载源文件 quadprog.tar.gz。最后,运行命令
install.packages("PATH_TO_FILE/quadprog_1.5-5.tar.gz", repos = NULL, type="source", INSTALL_opts = "--merge-multiarch")
或者,您可以等待几天。相信CRAN上的包会很快更新的
因为我不断收到有关此问题的电子邮件:
使用 packageDescription("quadprog")
查看您安装的软件包是在哪个版本的 R 下构建的。
如果版本是 R 3.3.x
(或更早版本),请使用 update.packages(checkBuilt=TRUE)
将您的版本更新为在 R 3.4.x
.
下构建的版本
我最近清理了一个从 quadprog 包调用 solve.QP 的脚本(我目前的版本是 1.5-5)。现在它生成错误 "object '.QP_qpgen2' not found"。我不明白为什么。
这个对象不是我创建的,而是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))
错误可以从 documentation for 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。
如我的评论所述,R 3.4 有一种注册外部例程的新方法。 Quadprog 依赖 Fortran 例程。 要解决这个问题,您需要使用当前的 Rtools 在 R 3.4 中从源代码构建包。您需要有 Rtools installed and setup (A google search will get you to a guide how to set-up Rtools for whatever system you are using). Then, go to CRAN page of the quadprog 软件包并下载源文件 quadprog.tar.gz。最后,运行命令
install.packages("PATH_TO_FILE/quadprog_1.5-5.tar.gz", repos = NULL, type="source", INSTALL_opts = "--merge-multiarch")
或者,您可以等待几天。相信CRAN上的包会很快更新的
因为我不断收到有关此问题的电子邮件:
使用 packageDescription("quadprog")
查看您安装的软件包是在哪个版本的 R 下构建的。
如果版本是 R 3.3.x
(或更早版本),请使用 update.packages(checkBuilt=TRUE)
将您的版本更新为在 R 3.4.x
.