Sizin durumunuz için, data.table
'u sadece bir işlevde değil, dışarıda kullanmanız önerilir.
Ancak, bunun gerçekleşmesi olası değilse, setDT
+ setDF
kurulumunu öneririm. setDT
'u işlev dışında kullanmanızı (ve data.table'ı girdi olarak sağla) - data.frame'inizi referans ile bir data.table'a dönüştürmesini ve ardından istediğiniz işlemleri tamamladıktan sonra setDF
'u kullanabilirsiniz. sonucu setDF
kullanarak bir data.frame dosyasına geri döndürün ve bunu işlevden döndürün. Bununla birlikte, setDT(x)
yapılıyor x
bir data.table için - referans olarak çalıştığından.
Bu ideal değilse, bir kopyasında çalıştığı için işlevinizin içinde as.data.table(.)
'u kullanın. Ardından, elde edilen data.table dosyasını data.frame dosyasına dönüştürmek ve data.frame işlevinizden döndürmek için setDF()
'u kullanabilirsiniz.
Bu işlevler yakın zamanda kullanıma sunulmuştur (çoğunlukla kullanıcı istekleri nedeniyle). Bu karışıklığı önleme fikri, shallow()
işlevini dışa aktarmak ve kopyalanacak sütunlar gerektiren nesneleri takip etmektir ve hepsini dahili olarak (ve otomatik olarak) yapmaktır. Her şey şu anda çok erken aşamalarda. Yönetdiğimiz zaman bu yazıyı güncelleyeceğim.
Ayrıca ?copy
, ?setDT
ve ?setDF
de bakabilirsiniz. Bu işlevin yardım sayfasında ilk paragraf:
data.table
tabirle
, tüm set*
fonksiyonları referans olarak onların girişi değiştirin. Yani, bir sütun kadar büyük olan geçici çalışma belleği dışında hiç bir kopya yapılmaz. Referans olarak girişi değiştiren diğer data.table
operatörü :=
'dur. Diğer set*
işlev data.table için aşağıdaki See Also
bölümüne göz atın.
Ve setDT
için örnek: (Buranın biraz daha iyi açıklanabilir itiraf rağmen)
set.seed(45L)
X = data.frame(A=sample(3, 10, TRUE),
B=sample(letters[1:3], 10, TRUE),
C=sample(10), stringsAsFactors=FALSE)
# get the frequency of each "A,B" combination
setDT(X)[, .N, by="A,B"][]
hiçbir atama yapar. setDF
yılında
:
X = data.table(x=1:5, y=6:10)
## convert 'X' to data.frame, without any copy.
setDF(X)
bu oldukça açık olduğunu düşünüyorum. Ama daha fazla netlik sağlamaya çalışacağım. Ayrıca, bu işlevleri belgelerde de en iyi nasıl kullanacağımı ekleyeceğim.
Vay, bunu yaparken bile orijinal verileri değiştirir.beklemediğim çerçeve: 'dat <- data.frame (a = 1); dat2 <- dat; setDT (dat2); is.data.table (dat); “Bana dürüst olmak için buggy görünüyor. – thelatemail
"setDT" yerine "as.data.table" öğesini kullanın. – A5C1D2H2I1M1N2O1R2T1
@AnandaMahto - işe yaramıyor. 'SetDT'yi topladım çünkü sorun çıkarmadan nesneyi değiştiriyor,' <-' benim örneğimde yapamayacağına ya da başka bir şey yapana kadar. – thelatemail