Maciej B.

Maciej B. Doktorant

Temat: Wczytywanie wybranego pliku z .RData

Hej,

załóżmy, że mam następujący problem:

1. Mam kilkadziesiąt plików .RData, które dużo ważą (bez różnicy ile).
2. W każdym pliku znajduje się jeden zbiór, który mnie interesuje (załóżmy, że ma nazwę "JakiśZBIÓR"). Wszystkie zbiory stanowią jedną całość.

I teraz tak:
Chciałbym, w pętli, z każdego pliku .RData wczytać tylko interesujący mnie zbiór (""JakiśZBIÓR"), tak aby następnie je połączyć w jeden i zapisać do jakiegoś pliku (może być .RData, ale też jakiś inny format np. xlsx).

Czy jest możliwość uniknięcia wczytywanie całego .RData w celu pobrania jednego pliku?

edit. Oczywiście chodzi o wczytanie wybranego zbioru a nie pliku, jak to jest w tytule ale nie mogę go już edytować. :(Maciej B. edytował(a) ten post dnia 06.08.12 o godzinie 23:43
Wojciech Sobala

Wojciech Sobala Redaktor
statystyczny,
biostatystyk,
Instytut Medycyny
Pr...

Temat: Wczytywanie wybranego pliku z .RData

Wątpię czy to jest możliwe.
Pojedynczy obiekt można zapisać korzystając z saveRDS, a następnie odczytać readRDS.
Pakiet filehash pozwala w ten sposób zapisać wszystkie obiekty (niekoniecznie tylko w ten sposób, bo możliwy jest jeszcze jeden sposób realizacji takiej funkcjonalności).
Maciej B.

Maciej B. Doktorant

Temat: Wczytywanie wybranego pliku z .RData

Witam,

udało się osiągnąć zamierzony cel.

kod:


x<-1:20
save.image("D:/plik1.RData")
rm(x)
x<-10:20
save.image("D:/plik2.RData")
rm(x)
x<-30:236
save.image("D:/plik3.RData")
rm(x)


library(snowfall)
working.dir <- "D:/"
setwd(working.dir)

sfInit(parallel = TRUE, cpus = 4, type = "SOCK")
sfExport(list = "working.dir")

lofs <- list.files(pattern = ".RData")
inres <- sfSapply(x = lofs, fun = function(x, wd = working.dir) {
setwd(wd)
load(x)
return(x)
}, simplify = FALSE)
sfStop()

#result <- do.call("rbind", inres)
result <-unlist(inres)
names(inres)<-NULL



źródło:
http://stackoverflow.com/questions/11840366/read-datas...Maciej B. edytował(a) ten post dnia 12.08.12 o godzinie 21:21
Wojciech Sobala

Wojciech Sobala Redaktor
statystyczny,
biostatystyk,
Instytut Medycyny
Pr...

Temat: Wczytywanie wybranego pliku z .RData

Chyb nie do końca dobrze zrozumiałem o co ci dokładnie chodzi, bo napisałeś : "Chciałbym, w pętli, z każdego pliku .RData wczytać tylko interesujący mnie zbiór". Zrozumiałem, że w pliku .RData masz zbiór z danymi (np. data.frame) oraz inne zbiory których nie chcesz wczytywać.
Tytuł postu jednak lepiej odzwierciedlał to o co ci chodzi niż opis zamieszczony w treści postu.

Ciekaw jestem jaką przewagę daje zastosowanie sfSapply zamiast lapply (chodzi oczywiście o szybkość wczytywania)?
Maciej B.

Maciej B. Doktorant

Temat: Wczytywanie wybranego pliku z .RData

Rzeczywiście i tak cały czas będę wczytywał cały plik...ale mniej więcej to jest o co mi chodziło.

Troszkę inny, lepszy przykład.


x<-as.data.frame(1:20)
names(x)<-'NAZWA'
y<-'c'
z<-'dshgs'
d<-as.matrix(10,10)
save.image("D:/R_default/test/plik1.RData")
rm(list=ls())
x<-as.data.frame(1:20*10)
names(x)<-'NAZWA'
y<-'c'
z<-'dshgs'
d<-as.matrix(10,10)
save.image("D:/R_default/test/plik2.RData")
rm(list=ls())
x<-as.data.frame(1:20*234)
names(x)<-'NAZWA'
y<-'c'
z<-'dshgs'
d<-as.matrix(10,10)
save.image("D:/R_default/test/plik3.RData")
rm(list=ls())

library(snowfall)
working.dir<-'D:/R_default/test'
setwd(working.dir)

sfInit(parallel = TRUE, cpus = 4, type = "SOCK")

sfExport(list = "working.dir")

lofs <- list.files(pattern = ".RData")
inres <- sfSapply(x = lofs, fun = function(x, wd = working.dir) {
setwd(wd)
load(x)
return(x)
}, simplify = FALSE)
sfStop()

result <- do.call("rbind", inres)
Maciej B. edytował(a) ten post dnia 13.08.12 o godzinie 09:42

Następna dyskusja:

Wczytywanie danych z pliku ...




Wyślij zaproszenie do