我是R的新手,如果问题有点傻,请原谅我。 我正在尝试为值函数迭代编写一个简单的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是以下函数:
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循环的函数来源,则不会显示错误。老实说,我不知道。任何帮助是极大的赞赏。谢谢!
和Claudia
答案 0 :(得分:15)
当我使用。命名变量时,我有完全相同的错误消息 R中现有函数的相同名称。我发现了这个提示 在这里: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)
mean是一个变量和一个函数名称作为参数传递给导致冲突的聚合函数
答案 1 :(得分:4)
以前在R环境中创建名为“mean”的对象时,很多时候会出现该错误。这在调用函数“mean”时会产生冲突。要停止此错误,请使用:
rm(mean)
这将从环境中删除对象“mean”,并允许R调用函数“mean”。