Ini kode R saya. Fungsi didefinisikan sebagai:
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)
}
Kesalahan yang berjalan adalah:
> test ()
Kesalahan dalam pengujian ():
janji sudah dalam evaluasi: referensi argumen default rekursif atau masalah sebelumnya?
Jika saya mengganti definisi dari fitu g, maka kesalahan hilang.
Saya bertanya-tanya apa kesalahannya? Bagaimana cara memperbaikinya jika tidak mengganti definisi fdi dalam dari itu g? Terima kasih!
Memperbarui:
Terima kasih! Dua pertanyaan:
(1) jika fungsi testlebih lanjut membutuhkan argumen f, apakah Anda akan menambahkan sesuatu seperti test <- function(g.=g, T=1, f..=f){ g.(1,T, f.=f..) }? Dalam kasus dengan lebih banyak rekursi, apakah ini praktik yang baik dan aman menambahkan lebih banyak . ?
(2) jika fargumen non-fungsi, misalnya g <- function(x, T, f=f){ exp(-f*x/T) }dan test <- function(g.=g, T=1, f=f){ g.(1,T, f=f.) }, akan menggunakan nama yang sama untuk argumen non-fungsional formal dan aktual merupakan praktik yang baik dan aman atau dapat menyebabkan beberapa potensi masalah?