これが私のRコードです。関数は次のように定義されます。
f <- function(x, T) {
10 * sin(0.3 * x) * sin(1.3 * x ^ 2) + 0.001 * x ^ 3 + 0.2 * x + 80
}
g <- function(x, T, f=f) {
exp(-f(x) / T)
}
test <- function(g=g, T=1) {
g(1, T)
}
実行エラーは次のとおりです。
> test()test()の
エラー:
既に評価中の約束:再帰的なデフォルト引数参照または以前の問題?
私はの定義に置き換えた場合f
のものでg
、その後、エラーが表示されなくなります。
エラーは何だったのだろうと思っていましたか?の定義を置き換えない場合の修正方法f
はg
?ありがとう!
更新:
ありがとう!2つの質問:
(1)関数test
がの引数をさらに取るf
場合、次のようなものを追加しtest <- function(g.=g, T=1, f..=f){ g.(1,T, f.=f..) }
ますか?より多くの再帰がある場合、それを追加することは良い安全な方法です。?
(2)とのようf
な非関数の引数である場合g <- function(x, T, f=f){ exp(-f*x/T) }
、test <- function(g.=g, T=1, f=f){ g.(1,T, f=f.) }
正式な非関数の引数と実際の非関数の引数の両方に同じ名前を使用することは適切で安全な方法でしょうか、それとも潜在的な問題を引き起こす可能性がありますか?