Frage

Ich möchte eine ganze Reihe von relativ großen Datenrahmen speichern, während der Raum zu minimieren, dass die Dateien in Anspruch nehmen. Wenn die Dateien zu öffnen, muss ich der Lage sein, zu kontrollieren, welche Namen sie im Arbeitsbereich angegeben.

Im Grunde suche ich nach dem symantics von dput und DGET aber mit Binärdateien.

Beispiel:

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
}
War es hilfreich?

Lösung

Ihre beste Wette ist RDA-Dateien zu verwenden. Sie können die save() verwenden und load() Befehle zu schreiben und lesen:

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

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

Edit: Für Vollständigkeit, nur um zu decken, was Harlan Vorschlag aussehen könnte (das heißt den Ladebefehl Einwickeln den Datenrahmen zurück):

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

loadx(a, "test.rda")

Alternativ haben einen Blick auf die hdf5, RNetCDF und ncdf Pakete. Ich habe experimentiert mit dem hdf5 Paket in der Vergangenheit; diese verwendet der NCSA HDF5 Bibliothek . Es ist sehr einfach:

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

Eine letzte Option ist Binärdatei Verbindungen zu verwenden, aber das wird in Ihrem Fall, weil readBin und writeBin nur Support-Vektoren nicht gut funktionieren:

Hier ist ein triviales Beispiel. Zuerst schreiben Sie einige Daten mit „w“ und fügen Sie „b“, um die Verbindung:

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

Dann werden die Daten mit „r“ lesen und „b“ auf die Verbindung anfügen:

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

Andere Tipps

Sie können einen Blick auf saveRDS und readRDS haben. Sie sind Funktionen für die Serialisierung.

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

saveRDS(x, file="myDataFile.rds")
x <- readRDS(file="myDataFile.rds")
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top