関数定義でオプションの引数を使用すると、省略記号に問題があります。明確にするために、次の関数を定義します。
func1 <- function (x) (x-2)^2
func3 <- function (fun, arg.curve.user){
arg.curve.user$expr <- substitute(func1)
arg.curve.default <- list(col = "blue", n = 1000, main = "This is a test")
arg.curve <- modifyList (arg.curve.default, arg.curve.user)
do.call("curve", arg.curve)
}
# optimizes func1 and call func2 to plot func1
func2 <- function (lb, ub, n.restarts = 5, n.sim = 10, ...){
arg.curve.user <- as.list(substitute(list(...)))
output <- gosolnp(fun = func1, LB = lb, UB = ub, n.restarts = n.restarts,
n.sim = n.sim)$par
func3(fun = func1, arg.curve.user = arg.curve.user)
return(output)
}
func2を呼び出すことにより、func1が最適化され、func3呼び出しによってもプロットされます(パッケージRsolnpが必要です)。
func2 ( lb = 0, ub = 8, n.restarts = 5, n.sim = 10, n = 200, from = 0, to = 8)
しかし、ユーザーがスペルn.restarts
を間違えて次のように書いたとしますnrestarts
。
func2 ( lb = 0, ub = 8, nrestarts = 5, n.sim = 10, n = 200, from = 0, to = 8)
この場合、私はRが次の計画を実行して不在に対処することを期待していますn.restarts
。
- オプションの引数としてデフォルト値、つまり5をn.restartsに割り当てます
- 最後に警告を宣言します:「nrestarts」はグラフィカルパラメータではありません
しかし、これは発生せず、 Rは代わりにn(200)の値をn.restartsに割り当てます!!
誰かが私がこの問題を解決するのを手伝ってもらえますか?
どうもありがとう