2015-05-12 59 views
0

我想中的R的R - 「其中TRUE/FALSE需要缺失值」

library(nloptr) 

m = 0.00060981 
m2 = 0.000109362 
m4 = 5.21538E-08 
m6 = 4.25E-11 
f=function(X){ 
    Y = matrix(NA, ncol = 1, nrow = 4) 
    mu = X[1] 
    S2=X[2] 
    S2u = X[3] 
    lambda= X[4] 
    Y[1] = (mu-(S2/2))-m 
    Y[2] = (S2+(lambda*S2u))-m2 
    Y[3] = ((3*(S2^2) + 6*(lambda^2)*(S2u^2)+3*(S2u^2)*(lambda) + 6*(lambda)*(S2u)*S2))-m4 
    Y[4] = (15*(S2^3) +45*(S2^2)*S2u + 45*(lambda^2)*(S2u^2)*S2 +45*(lambda)*(S2u^2)*S2 +15*(lambda^3)*(S2u^3)+45*(lambda^2)*(S2u^3)+15*lambda*(S2u^3))-m6 
    return(Y) 
} 
g = function(X){ 
    return(norm(f(X),'f')) 
} 
initiale=c(0.00197,0.022,0.0036,0.8999) 
hin = function(X){ 
h=rep(NA,1) 
h[2]>0 
h[3]>0 
h[1]<h[2] 

h 
} 
ans=auglag(par=initiale,fn=g,hin=hin) 

執行下面的代碼,但我得到這個錯誤:

Error in if (sig > 1e+05) control.optim$reltol <- 1e-10 : 
    missing value where TRUE/FALSE needed 

我爲什麼得到這個錯誤,以及如何修復代碼?

+0

你說的那裏的代碼沒有你提到的'sig> 1e + 05'這行......你可以發佈完整的代碼嗎? –

+0

這是完整的代碼,我沒有使用參數sig! – Meryem

+0

您可能想要在代碼中包含所需的'library(nloptr)',如果實際上這是'auglag()'函數的源代碼,雖然它的記錄參數似乎不匹配您所做的調用? –

回答

2

我懷疑錯誤消息是h功能

hin = function(X){ 
     h=rep(NA,1) 
     h[2]>0 
     h[3]>0 
     h[1]<h[2] 
     h 
} 

h值是總是NA和永遠不會改變的結果。