Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
get中出错(as.character(FUN),mode=";function";,envir=envir)_R_Ipopt - Fatal编程技术网

get中出错(as.character(FUN),mode=";function";,envir=envir)

get中出错(as.character(FUN),mode=";function";,envir=envir),r,ipopt,R,Ipopt,我是新手,所以如果这个问题有点傻,请原谅我。 我试图为值函数迭代编写一个简单的while循环。我的函数(optim.routine)使用解算器ipoptr。这是我的密码: 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

我是新手,所以如果这个问题有点傻,请原谅我。 我试图为值函数迭代编写一个简单的while循环。我的函数(optim.routine)使用解算器ipoptr。这是我的密码:

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<-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
  }
}
Browse[2]> n
Error in isTRUE(update) : argument "update" is missing, with no default
如果我只为没有while循环的函数提供源代码,则不会显示错误。老实说,我不知道。非常感谢您的帮助。谢谢

克劳迪娅


当我用 与R中现有函数的名称相同。我发现了这个技巧 这里:希望它也能帮助你。 -弗朗特10月12日11:26

他是对的,不要使用可能也是函数名的变量

e、 g


z1以前在R环境中创建名为“mean”的对象时,会多次出现该错误。这会在调用函数“mean”时产生冲突。要停止此错误,请使用:

rm(mean)

这将从环境中删除对象“mean”,并允许R调用函数“mean”。

+1我遇到过类似的问题,但仍然不能完全理解发生了什么:(尽管答案对您没有多大帮助)。这里还有一个类似的问题:在哪里定义eval_f和eval_grad_f?你有一个完整的例子来展示这种行为吗?它们是目标函数及其梯度。如果需要,我可以发布整个代码。在我的例子中,梯度是用切比雪夫多项式近似的。当我用R中现有函数的相同名称命名变量时,我收到了完全相同的错误消息。我在这里找到了这个技巧:希望它也能帮助你。[1] :或使用FUN=“mean”代替FUN=mean。
z1<-aggregate(steps ~ interval, data_df, mean)
mean<-mean(z[,2],na.rm = TRUE)
rm(mean)