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
İş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
.NET veri yapıları: ArrayList, her ne ...
Sql Azure tablo Depolama kullanmalıyım...
Akıllı bir işaretçi nedir ve ne zaman ...
Ne zaman ve nasıl ThreadLocal bir deği...
Ne zaman bir form's opaklık ayarı...