2012-11-26 19 views
13

4GB'lık belleğim için oldukça büyük 2,5 GB'lık bir veri kümem var. Karakter değişkenlerini faktörlere dönüştürmenin alan ve işlem zamanından tasarruf edip etmeyeceğini merak ediyorum.Karakter sütunlarını faktörlere dönüştürüyor mu?

İçten içe, faktörlerin, değerler için bir arama tablosuyla sayısal olarak saklanacağını düşünürdüm. Ama aslında nasıl çalıştığından emin değilim.

+0

Sen faktörler depolandığı yolu hakkında doğru. Ancak alan tasarrufu, faktör düzeylerinin sayısına ve dönüştürmek istediğiniz dizelerin uzunluğuna bağlıdır. Ayrıca ff gibi büyük veri paketlerine de bakmak isteyebilirsiniz. – Justin

+3

Faktöre dönüştürme, alan bir kareleme masasında saklandığından alandan tasarruf etmeyecektir. Faktöre dönüştürme işlemi işleme süresini artırabilir - eğer yaptığınız her ne olursa olsun karakteri neyse faktörü dönüştürür - ancak gerçekten yaptığınız şeye bağlıdır. –

+0

Açık bir açıklama için çok teşekkürler, Joshua. Ve ff paketini işaret ettiği için teşekkürler Justin. – AdamNYC

cevap

12

Karaktere dönüştürülme, karakterler bir karma tablonun içinde depolandığından dolayı yer kazandırmaz. R Internals'un 1.10 The CHARSXP cache numaralı bölümüne bakın.

Eğer kodunuzun faktörü (bir regresyon, sınıflandırma, vb.) Çalıştırması gerekiyorsa, faktörü dönüştürmek işlem süresini artırabilir, ancak dize manipülasyonu yapıyorsanız işleme süresini artırmaz çünkü Faktörü tekrar bir karaktere dönüştürmek için. Yani gerçekten yaptığınız şeye bağlı. diske veri yazarken yerden tasarruf etmez faktörler olarak yerine karakter vektörler olarak kategorik verileri saklama

+0

İlk cümlenizi detaylandırır mısınız? Veya detaylar sağlayan bir referansınız var mı? – Dason

+0

@Dason: Elaboration eklendi. :) –

+0

Teşekkür ederiz! Bunu yaptığının farkında değildim ama bilmek güzel. – Dason

6

:

## Create 2 two-million length vectors, one character and one factor 
animalsChar <- c(rep("giraffe", 1e6), rep("pygmy chimpanzee", 1e6)) 
animalsFac <- factor(animalsChar) 

## Save them to two ".Rdata" files 
charFile <- "char.Rdata" 
facFile <- "fac.Rdata" 
save(animalsChar, file = "char.Rdata") 
save(animalsFac, file = "fac.Rdata") 

## Compare the sizes of the two files 
file.info("char.Rdata", "fac.Rdata")["size"] 
#    size 
# char.Rdata 87390 
# fac.Rdata 7921 


## Clean up 
unlink(c("char.Rdata", "fac.Rdata")) 
+4

RAM'deki yer ve HDD'deki yer farklıdır. Print (object.size (animalsChar), units = "Mb") 'seçeneğini işaretleyin. –

+0

@JoshuaUlrich - Açıklama için teşekkürler. Önce object.size() 'yi denedim ve sonuçlarına merak ettim. Böyle görünüyor, bazı durumlarda hala kullanışlı olabilir. –

İlgili konular