समस्या यह है कि आप स्मृति में सभी डेटा लोड नहीं कर सकते हैं। तो आप डेटा का नमूनाकरण कर सकते हैं, जैसा कि पहले @Marek द्वारा दर्शाया गया था। इस तरह के एक विशाल डेटासेट पर, आप अनिवार्य रूप से वही परिणाम प्राप्त करते हैं भले ही आप डेटा का केवल 1% लेते हैं। वायलिन साजिश के लिए, यह आपको घनत्व का एक सभ्य अनुमान देगा। क्वांटाइल की प्रगतिशील गणना असंभव है, लेकिन यह एक बहुत सभ्य अनुमान देना चाहिए। यह अनिवार्य रूप से लिंक @aix में वर्णित "यादृच्छिक विधि" जैसा ही है।
यदि आप आर के बाहर की तारीख को सब्सक्राइब नहीं कर सकते हैं, तो इसे sample()
के साथ संयोजन में कनेक्शन का उपयोग करके किया जा सकता है। निम्नलिखित फ़ंक्शन वह है जो मैं टेक्स्ट प्रारूप में डेटाफ्रेम से नमूना डेटा का उपयोग करता हूं, जब यह बहुत बड़ा हो रहा है। यदि आप कनेक्शन के साथ थोड़ा सा खेलते हैं, तो आप आसानी से इसे किसी सॉकेट कनेक्शन में परिवर्तित कर सकते हैं या अन्य इसे सर्वर, डेटाबेस, जो कुछ भी पढ़ सकते हैं। बस सुनिश्चित करें कि आप सही मोड में कनेक्शन खोलें।
अच्छा, सरल लें।csv फ़ाइल, तो समारोह के नमूने डेटा का एक अंश पी निम्नलिखित:
sample.df <- function(f,n=10000,split=",",p=0.1){
con <- file(f,open="rt",)
on.exit(close(con,type="rt"))
y <- data.frame()
#read header
x <- character(0)
while(length(x)==0){
x <- strsplit(readLines(con,n=1),split)[[1]]
}
Names <- x
#read and process data
repeat{
x <- tryCatch(read.table(con,nrows=n,sep=split),error = function(e) NULL)
if(is.null(x)) {break}
names(x) <- Names
nn <- nrow(x)
id <- sample(1:nn,round(nn*p))
y <- rbind(y,x[id,])
}
rownames(y) <- NULL
return(y)
}
उपयोग का एक उदाहरण:
#Make a file
Df <- data.frame(
X1=1:10000,
X2=1:10000,
X3=rep(letters[1:10],1000)
)
write.csv(Df,file="test.txt",row.names=F,quote=F)
# n is number of lines to be read at once, p is the fraction to sample
DF2 <- sample.df("test.txt",n=1000,p=0.2)
str(DF2)
#clean up
unlink("test.txt")
आपके मामले में 'बहुत बड़ा' वास्तव में क्या मतलब है? – radek
@radek: "सभी डेटा मेमोरी में फिट नहीं हो सकता" जैसा कि "आर को संभालने के लिए बहुत बड़ा" का एक अच्छा अनुमान है। चाहे यह 2 जीबी या 20 जीबी वास्तव में कोई फर्क नहीं पड़ता है, है ना? –
@ जोरीस जब तक ओपी में स्मृति नहीं है। मिलिट बहुत छोटा या कई अनावश्यक कॉलम या कुछ और। यह जानकारी प्रासंगिक हो सकती है। – Marek