Bagaimana saya bisa mendapatkan nama fungsi dalam fungsi non-anonim itu? di bawah ini saya berasumsi ada fungsi atau proses untuk melakukan ini disebut magical_r_function()
dan apa yang diharapkan akan dihasilkan.
my_fun <- function(){
magical_r_function()
}
my_fun()
## [1] "my_fun"
foo_bar <- function(){
magical_r_function()
}
foo_bar()
## [1] "foo_bar"
ballyhoo <- function(){
foo_bar()
}
ballyhoo()
## [1] "foo_bar"
tom_foolery <- foo_bar
tom_foolery()
## [1] "tom_foolery"
match.call
dansys.call
fungsi dasar yang valid dengan sedikit perbedaan dalam "efek" dan "persyaratan". Jadi saya ingin tahu wawasan yang mungkin Anda miliki dalam memilih satu dari yang lain.Coba
sys.call(0)
jika output objek panggilan ok atau jelaskan jika Anda hanya ingin nama sebagai string karakter. Di bawah ini adalah beberapa tes ini. sys.call mengembalikan nama dan argumennya dan [[1]] hanya memilih nama.Nama fungsi
Perhatikan bahwa fungsi sebenarnya tidak memiliki nama. Apa yang kita anggap sebagai nama fungsi sebenarnya hanya variabel yang memiliki fungsi dan bukan bagian dari fungsi itu sendiri. Fungsi terdiri dari argumen, tubuh, dan lingkungan - tidak ada nama fungsi di antara konstituen tersebut.
Fungsi anonim
Selain itu, orang dapat memiliki fungsi anonim dan ini dapat mengembalikan hasil aneh ketika digunakan dengan di atas.
Kasus tepi
Memang ada beberapa situasi, terutama yang melibatkan fungsi anonim, di mana
deparse
akan mengembalikan lebih dari satu elemen jadi jika Anda ingin menutup kasus tepi tersebut gunakan argumen nlines = 1 untuk menyebarkan atau menggunakan deparse (...) [[1]] atau sebagai disebutkan oleh @Konrad Rudolph dengan menggunakan deparse1 di R 4.0.0.Lain
Ingat . Jika alasan Anda ingin nama fungsi adalah untuk memanggil fungsi secara rekursif, maka gunakanlah
Recall()
. Dari file bantuan:peringatan dan berhenti Keduanya mengeluarkan nama fungsi bersama dengan argumen apa pun yang diberikan kepada mereka sehingga tidak perlu untuk mendapatkan nama fungsi saat ini.
sumber
deparse1
fungsi. Saya kira kita harus mulai menggunakan itu daripadadeparse
secara default, setelah adopsi cukup tinggi.Recall
, yang saya rasa adalah apa yang benar-benar dibutuhkan OP. Namun, contoh Anda dari deret Fibonacci tidak benar-benar bagus: ia memiliki masalah yang sering Anda ulangi panggilan: karenafib(10)
,fib(8)
disebut 2 kali total (sekalifib(10)
secara langsung, sekali olehfib(9)
),fib(7)
disebut 3 kali,fib(6)
disebut 5 kali. Lihat kemana ini?Kita juga bisa menggunakan
sumber