سؤال

وأود أن حفظ في مجمله مجموعة من الأطر البيانات الكبيرة نسبيا مع تقليل المساحة التي الملفات يستغرق. عند فتح الملفات، ولست بحاجة إلى أن تكون قادرة على السيطرة على ما أسماء تعطى في مساحة العمل.

وأساسا أنا أبحث عن symantics من dput وDGET ولكن مع الملفات الثنائية.

مثال:

n<-10000

for(i in 1:100){
    dat<-data.frame(a=rep(c("Item 1","Item 2"),n/2),b=rnorm(n),
        c=rnorm(n),d=rnorm(n),e=rnorm(n))
    dput(dat,paste("data",i,sep=""))
}


##much later


##extract 3 random data sets and bind them
for(i in 1:10){
    nums<-sample(1:100,3)
    comb<-rbind(dget(paste("data",nums[1],sep="")),
            dget(paste("data",nums[2],sep="")),
            dget(paste("data",nums[3],sep="")))
    ##do stuff here
}
هل كانت مفيدة؟

المحلول

وأفضل رهان هو استخدام الملفات التمييز العنصري. يمكنك استخدام save() وأوامر load() لكتابة وقراءة:

set.seed(101)
a = data.frame(x1=runif(10), x2=runif(10), x3=runif(10))

save(a, file="test.rda")
load("test.rda")

<ط> تحرير: للاكتمال، فقط لتغطية ما اقتراح هارلان قد تبدو (أي التفاف الأمر تحميل للعودة إطار البيانات):

loadx <- function(x, file) {
  load(file)
  return(x)
}  

loadx(a, "test.rda")

وبدلا من ذلك، إلقاء نظرة على hdf5، RNetCDF وncdf الحزم. لقد جربت مع hdf5 حزمة في الماضي؛ هذا يستخدم المكتبة NCSA HDF5 . الأمر في غاية البساطة:

hdf5save(fileout, ...)
hdf5load(file, load = TRUE, verbosity = 0, tidy = FALSE)

وثمة خيار آخر هو استخدام وصلات الملفات الثنائية، ولكن ذلك لن تعمل بشكل جيد في قضيتك لreadBin وwriteBin ناقلات الوحيد الدعم:

إليك مثالا تافها. أول كتابة بعض البيانات مع "ث" وإلحاق "ب" للاتصال:

zz <- file("testbin", "wb")
writeBin(1:10, zz)
close(zz)

وثم قراءة البيانات مع "ص" وإلحاق "ب" للاتصال:

zz <- file("testbin", "rb")
readBin(zz, integer(), 4)
close(zz)

نصائح أخرى

ويمكنك إلقاء نظرة على saveRDS وreadRDS. وهي وظائف لالتسلسل.

x = data.frame(x1=runif(10), x2=runif(10), x3=runif(10))

saveRDS(x, file="myDataFile.rds")
x <- readRDS(file="myDataFile.rds")
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top