2013-08-02 15 views
5

Ben ad alanını Yapacak R az iş verdiğini düşünmüştüm amaNeden ad alanını belirten bir işlev çağrısı yavaş?

library(microbenchmark) 
> microbenchmark(unique.default(c(1,1:10)),base::unique.default(c(1,1:10))) 
Unit: microseconds 
          expr min  lq median  uq max neval 
     unique.default(c(1, 1:10)) 3.528 3.849 4.0095 4.170 12.509 100 
base::unique.default(c(1, 1:10)) 11.546 12.188 12.5090 12.829 59.012 100 
+4

Birinin işaret etmesi gerekiyordu: bunlar mikrosaniyeler! Kodunuz daha karmaşık bir şey yapacaksa, muhtemelen önemsiz. – flodel

+0

@flodel% 99.9 içinde haklısınız. Ama çok fazla işlev çağrısına sahip bir programım var, hepsi büyük bir döngüde kaldı. Data.table sayesinde tamamen vectorised yeni bir versiyon açmak üzereyim, ama hala dev modda, bu arada bu döngüde her döngü kaydedilen bir milisaniye tüm programın dakika dakika daha az ... – Michele

+1

Eğer isim anlaşmazlığınız varsa ve bu yüzden '' ''ye ihtiyacın varsa,' my.unique <- base :: unique.default' türünü kullanabilir ve 'my.unique' komutunu kullanabilirsiniz. – Roland

cevap

7

ilk base takılı kaldığında oluşan paket ortamdan işlevini alır muhtemelen yanılıyorum:

> "unique.default" %in% ls("package:base") 
[1] TRUE 

> `::` 
function (pkg, name) 
{ 
    pkg <- as.character(substitute(pkg)) 
    name <- as.character(substitute(name)) 
    getExportedValue(pkg, name) 
} 
:

ikinci kullanımları paket ad alanından işlevini almak için :: işlev

Bu fonksiyonun kaç fonksiyona ihtiyaç duyduğunu görün.

Yalnızca bir kez işlev istiyorsanız, ad alanından almak daha verimli olabilir. Ancak tekrar tekrar ihtiyacınız varsa veya bir paketten birkaç fonksiyona ihtiyacınız varsa, paketi eklemelisiniz.

+1

Veya bir ad alanı dosyasının bulunduğu bir paket kullanın. – hadley

İlgili konular