对于constraOptim中的原子向量,R $运算符无效

时间:2015-12-14 20:57:27

标签: r optimization

我在这里有一个关于如何实施constrOptim的问题:

文档中的示例如下:

fQP <- function(b) {-sum(c(0,5,0)*b)+0.5*sum(b*b)}
Amat       <- matrix(c(-4,-3,0,2,1,0,0,-2,1), 3, 3)
bvec       <- c(-8, 2, 0)
constrOptim(c(2,-1,-1), fQP, NULL, ui = t(Amat), ci = bvec)

但是,当我将代码更改为:

fQP <- function(b) {-sum(c(0,5,0)*b)+0.5*sum(b*b)+c}
Amat       <- matrix(c(-4,-3,0,2,1,0,0,-2,1), 3, 3)
bvec       <- c(-8, 2, 0)
constrOptim(c(2,-1,-1), fQP, NULL, ui = t(Amat), ci = bvec,c=5)

发生错误:

  

错误:$运算符对原子矢量无效

有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:3)

错误源于参数c=5control参数与constrOptim函数匹配,因此这与调用相同:

constrOptim(c(2,-1,-1), fQP, NULL, ui = t(Amat), ci = bvec,control=5)
# Error: $ operator is invalid for atomic vectors

control参数希望传递一个列表但是传递5,所以当它尝试访问元素时会引发此错误。

要使此设置有效,您需要明确声明c是函数的参数(并进一步将其更改为不会与内置c函数冲突的名称,你也在该功能中使用):

fQP <- function(b, c2) {-sum(c(0,5,0)*b)+0.5*sum(b*b)+c2}
Amat       <- matrix(c(-4,-3,0,2,1,0,0,-2,1), 3, 3)
bvec       <- c(-8, 2, 0)
constrOptim(c(2,-1,-1), fQP, NULL, ui = t(Amat), ci = bvec,c2=5)
# $par
# [1] 0.4762222 1.0475556 2.0951112
# 
# $value
# [1] 2.619048
# 
# $counts
# function gradient 
#      506       NA 
# 
# $convergence
# [1] 0
# 
# $message
# NULL
# 
# $outer.iterations
# [1] 3
# 
# $barrier.value
# [1] -0.0006243968