19

私は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 ループを使用せずに関数のみをソースすると、エラーは表示されません。正直なところ、私には手がかりがありません。どんな助けでも大歓迎です。ありがとう!

クラウディア

4

2 に答える 2

22

R の既存の関数と同じ名前の変数に名前を付けたときに、まったく同じエラー メッセージが表示されました。 -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 が変数であり、集約関数に引数として渡された関数名が競合を引き起こしている

于 2014-11-16T16:14:32.477 に答える
12

以前に R 環境で "mean" というオブジェクトを作成したときに、そのエラーが何度も表示されます。これにより、関数「平均」を呼び出すときに競合が発生します。このエラーを停止するには、次を使用します。

rm(mean)

これにより、オブジェクト「平均」が環境から削除され、R が関数「平均」を呼び出すことができるようになります。

于 2016-03-28T13:11:42.617 に答える