R objektumok (de)szerializációja

A szerializáció, illetve deszerializáció a memóriában tárolt objektumok külső tárolóra történő mentését, illetve az onnan történő visszaállítást jelenti. Közérthetőbben most arról lesz szó, hogyan lehet a legegyszerűbben elmentened, illetve betöltened R-objektumokat.

Mentés

  • hozzunk létre két példa-adatot:
x <- c(1, 3, 5, 7)
y <- data.frame(id = c("001", "002", "003"), IQ = c(92, 128, 101))
  • egy objektum mentése:
saveRDS(y, file = "iq.rds")
  • több objektum mentése:
save(x, y, file = "iq.RData")
  • (majdnem) minden objektum mentése
save(list = ls(), file = "all.RData")

Visszaállítás

  • a saveRDS-sel elmentett objektum nem tartalmazza az objektum nevét, tehát a beolvasott adatot hozzá kell rendelnünk egy új változóhoz:
y_import <- readRDS("iq.rds")

# ellenorzes
identical(y, y_import)
## [1] TRUE
  • a save parancs az objektumot és az objektum nevét is elmenti, így betöltéskor azok is betöltődnek -> NAGYON ÓVATOS legyél, mert észrevétlenül felülírhatsz egy memóriában tárolt változót
# létrehozok egy új x változót
x <- "proba"

# betoltom az "all.RData" fajlt
load("all.RData")

# mivel az "all.RData" fajl tartalmaz egy `x` objektumot, a betoltesevel 
# felulirtuk a memoriaban tarolt `x`-et
x
## [1] 1 3 5 7
  • a load fentebbi kellemetlen mellékhatása kiküszöbölhető, ha egy külön környezetbe töltjük be az adatokat, vagy ha csak beillesztjük a keresési útba
# uj kornyezet
e <- new.env(parent = emptyenv())
load("all.RData", e)
ls(e)
##  [1] "advAdd"              "advAdd2"             "arr"                
##  [4] "bib"                 "datfr"               "downvec"            
##  [7] "fac"                 "fit"                 "fit_summary"        
## [10] "i"                   "index"               "int"                
## [13] "mat"                 "mat1"                "mat2"               
## [16] "mat3"                "mydat"               "mylist"             
## [19] "mysum"               "newfac"              "newlist"            
## [22] "newmat"              "num"                 "packs"              
## [25] "print.specialVector" "simpleAdd"           "upvec"              
## [28] "vec"                 "vec.reference"       "vec.target"         
## [31] "x"                   "y"                   "z"
# keresesi ut modositasa
attach("all.RData")
x
## [1] 1 3 5 7
get("x", pos = 2)
## [1] 1 3 5 7

Példaadatok betöltése

Számos R csomag tartalmaz "beépített" példaadatokat. Ezen adatok valójában .RData vagy .rda kiterjesztésű fájlok, amelyek akár egy egyszerű load() paranccsal is betölthetők. Ehhez azonban tudunk kell a fájl elérési útját, ami helyett sokkal kényelmesebb a data() függvényt alkalmazni. A data() először a betöltött csomagokban keresi az adott nevű adatot, majd a munkakönyvtár "data" nevű mappájában (már ha létezik ilyen nevű könyvtár). A későbbiekben a data() parancsot gyakran fogjuk használni a példákban, például így:

# a diszlexia-vizsgálati adatok betoltese
data(dyslex)