Bu sizin kendi komut dosyanızsa, nasıl biçimlendirildiğini denetleyebilmeniz için basit bir kural yeterli olacaktır. Her işlev adının satırındaki ilk karakterden başladığından ve sözcüğün functionbu satırda da göründüğünden emin olun. Kelimenin diğer herhangi bir kullanımı functionboşluk veya sekme ile başlayan bir satırda görünmelidir. Sonra tek satırlık bir çözüm:
sub(" .*", "", grep("^\\S.*function", readLines("myscript.R"), value = TRUE))
Bu yaklaşımın avantajları
çok basit . Kurallar basitçe ifade edilir ve işlev adlarını çıkarmak için sadece bir basit R kodu satırı vardır. Regex de basittir ve mevcut bir dosya için kontrol edilmesi çok kolaydır - sadece kelimeyi grep functionve görüntülenen her oluşumun kurala uyup uymadığını kontrol edin.
kaynağı çalıştırmaya gerek yok. Tamamen statiktir .
çoğu durumda kaynak dosyayı değiştirmenize gerek kalmayacak ve diğerlerinde asgari değişiklikler olacaktır. Senaryoyu bu düşünceyle sıfırdan yazıyorsanız, düzenlemek daha da kolaydır.
Sözleşmeler fikri boyunca birçok alternatif var. daha karmaşık bir ifadeye sahip olabilirsiniz veya # FUNCTIONkomut dosyasını sıfırdan yazıyorsanız ve daha sonra bu ifadeyi yazıp ilk kelimeyi satırda ayıklarsanız, herhangi bir işlev tanımının ilk satırının sonuna ekleyebilirsiniz , ancak burada ana öneri görünüyor basitliği ve listelenen diğer avantajları nedeniyle özellikle çekici.
Ölçek
# 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(), ancak bu eski konu ilginizi çekebilir.