Jika ini adalah skrip Anda sendiri sehingga Anda memiliki kendali atas cara memformatnya, konvensi sederhana akan cukup. Pastikan saja setiap nama fungsi dimulai pada karakter pertama pada barisnya dan bahwa kata tersebut functionjuga muncul pada baris tersebut. Penggunaan kata lain functionakan muncul pada baris yang dimulai dengan spasi atau tab. Maka solusi satu baris adalah:
sub(" .*", "", grep("^\\S.*function", readLines("myscript.R"), value = TRUE))
Keuntungan dari pendekatan ini adalah bahwa
ini sangat sederhana . Aturan hanya dinyatakan dan hanya ada satu baris sederhana kode R yang diperlukan untuk mengekstrak nama fungsi. Regex juga sederhana dan untuk file yang sudah ada sangat mudah untuk memeriksa - cukup ambil kata functiondan periksa apakah setiap kemunculan yang ditampilkan mengikuti aturan.
tidak perlu menjalankan sumbernya. Itu sepenuhnya statis .
dalam banyak kasus Anda tidak perlu mengubah file sumber sama sekali dan dalam kasus lain akan ada perubahan minimal. Jika Anda menulis skrip dari awal dengan mengingat hal ini, bahkan lebih mudah untuk mengaturnya.
Ada banyak alternatif lain di sepanjang gagasan konvensi. Anda dapat memiliki regex yang lebih canggih atau Anda dapat menambahkan # FUNCTIONdi akhir baris pertama dari definisi fungsi apa pun jika Anda menulis skrip dari awal dan kemudian mengeluarkan frasa itu dan mengekstrak kata pertama pada baris tersebut tetapi saran utama di sini tampaknya sangat menarik karena kesederhanaannya dan kelebihan lainnya yang tercantum.
Uji
# generate test file
cat("f <- function(x) x\nf(23)\n", file = "myscript.R")
sub(" .*", "", grep("^\\S.*function", readLines("myscript.R"), value = TRUE))
## [1] "f"
source(), tetapi utas lama ini mungkin menarik bagi Anda.