SORU
11 AĞUSTOS 2011, PERŞEMBE


Ne zaman kullanmalıyım := veri.operatör tablo?

4* *şimdi bir nesne var := operatörü. Bu operatör diğer tüm atama operatörleri farklı kılan nedir? Ayrıca, kullanım alanları nelerdir, ne kadar hızlı ve ne kaçınılmalıdır?

CEVAP
11 AĞUSTOS 2011, PERŞEMBE


İşte bir örnek 10 dakika 1 saniye (homepage HABER) azalma gösteriyor. Gibi data.frame için subassigning ama tüm tabloyu her zaman kopya değildir.

m = matrix(1,nrow=100000,ncol=100)
DF = as.data.frame(m)
DT = as.data.table(m)

system.time(for (i in 1:1000) DF[i,1] <- i)
     user  system elapsed 
  287.062 302.627 591.984 

system.time(for (i in 1:1000) DT[i,V1:=i])
     user  system elapsed 
    1.148   0.000   1.158     ( 511 times faster )

Daha cümleler verir gibi j :=.:

DT["a",done:=TRUE]   # binary search for group 'a' and set a flag
DT[,newcol:=42]      # add a new column by reference (no copy of existing data)
DT[,col:=NULL]       # remove a column by reference

ve :

DT[,newcol:=sum(v),by=group]  # like a fast transform() by group

:= önlemek için herhangi bir sebep düşünemiyorum ! Dışında, for bir döngü içinde. Beri := görünür içinde DT[...], ve bununla birlikte, küçük yük [.data.table yöntemi; örneğin, S3 sevk ve kontrol için varlığı ve tür bağımsız değişkenleri gibi i, by, nomatch vb. for iç döngüler için := düşük maliyet, doğrudan bir sürümü set denir. Daha fazla bilgi ve örnekler için ?set bkz. set dezavantajları i Satır Numaraları (ikili arama) olmalı ve by ile birleştirmek edemez vardır. Bu kısıtlamaları yaparak set yükünü önemli ölçüde azaltabilir.

system.time(for (i in 1:1000) set(DT,i,"V1",i))
     user  system elapsed 
    0.016   0.000   0.018

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Elliot Davin

    Elliot Davin

    28 Kasım 2008
  • jkimisyellow

    jkimisyellow

    6 Mayıs 2009
  • kev5124

    kev5124

    9 Kasım 2008