2014-01-26 124 views
8

我是R新手,所以如果問題有點傻,請原諒我。 我正在嘗試爲值函數迭代編寫一個簡單的while循環。我的函數(optim.routine)使用求解器ipoptr。這裏是我的代碼:get(as.character(FUN),mode =「function」,envir = envir中的錯誤)

d<-1 
old1<-0 
old2<-0 
num.iter<-0 
i.esp<-1e-05 
i.T<-100 
lb<-0 
ub<-10 

while (d>i.eps & num.iter<i.T){ 
new1 <- optim.routine(old1, old2, eval_f=eval_f, eval_grad_f=eval_grad_f, lb=lb, ub=ub, update=FALSE) 
d<-dist(c(old1, new1), method="euclidean") 
num.iter<-num.iter+1 
old1<-new1 
} 

其中optim.routine如下功能:

optim.routine<-function(old1, old2, eval_f=obj, eval_grad_f=obj.deriv, lb=lb, ub=ub, update){ 
    if (isTRUE(update)){ 
    var2<-old2 
    var1<-old1 
    var1.deriv<-deriv(var1) 
    optimize <- ipoptr(x0 = old2, eval_f = eval_f, eval_grad_f = eval_grad_f, lb = lb, 
         ub = ub) 

    new1<- optimize$objective 
    new2<- optimize$solution 
    old2<-new2 
    old1<-new1 
    }else{ 
    var2<-old2 
    var1<-old1 
    var1.deriv<-vf.deriv(var1) 
    optimize <- ipoptr(x0 = old2, eval_f = eval_f, eval_grad_f = eval_grad_f, lb = lb, 
         ub = ub) 

    new1<- optimize$objective 
    new2<- optimize$solution 
    old1<-new1 
    } 
} 

和DERIV是計算衍生品的功能。

我收到以下錯誤,如果我嘗試運行代碼:

source('/mnt/ide0/home/myname/Documents/optim.R') 
Error in get(as.character(FUN), mode = "function", envir = envir) : 
    object 'fn' of mode 'function' was not found 

,如果我調試功能:

Browse[2]> n 
Error in isTRUE(update) : argument "update" is missing, with no default 

如果我唯一來源的功能,而不while循環沒有錯誤被展示。老實說,我不知道。任何幫助是極大的讚賞。謝謝!

克勞迪婭

+0

+1我運行過類似的問題,但仍然沒有完全理解到底會發生什麼上:http://stackoverflow.com/q/17808575/684229(答案雖然不會幫你很多)。另一個類似的問題在這裏:http://stackoverflow.com/q/16723036/684229 – TMS

+1

你在哪裏定義eval_f和eval_grad_f?你有一個獨立的例子,表現出這種行爲? –

+0

它們是目標函數及其梯度。如果需要,我可以發佈整個代碼。在我的情況下,梯度近似爲Chebychev多項式。 –

回答

12

我什麼時候叫我在河的現有功能的 相同名稱的變量相同的錯誤信息,我發現這個提示 這裏:http://notepad.patheticcockroach.com/2565/a-bad-idea-in-r-using-variables-with-the-same-name-as-existing-functions/希望它可以幫助你太。 - FraNut 10月12日11:26

他是正確的避免使用可能是函數名稱的變量。

z1<-aggregate(steps ~ interval, data_df, mean) 
mean<-mean(z[,2],na.rm = TRUE) 

平均值是一個變量,而發生衝突

2

很多時候你以前創建調用的對象會出現的錯誤作爲參數傳遞給聚合函數傳遞的函數名「的意思「在R環境中。這在調用函數「mean」時會產生衝突。爲了停止這個錯誤,使用> rm(mean)#這個從環境中刪除對象「mean」並允許R調用函數「mean」

相關問題