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")

# ellenőrzés
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"

# betöltöm az "all.RData" fájlt
load("all.RData")

# mivel az "all.RData" fájl tartalmaz egy `x` objektumot, a betöltésével 
# felülírtuk a memóriában tárolt `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
# új környezet
e <- new.env(parent = emptyenv())
load("all.RData", e)
ls(e)
##  [1] "arr"                 "cfa_res"             "cfa_std"            
##  [4] "corrs"               "count"               "createSequence"     
##  [7] "createSequence2"     "dat"                 "datfr"              
## [10] "datfr_nofactor"      "dat_num"             "estimated_means"    
## [13] "fa5"                 "fa6"                 "fac"                
## [16] "final_dat"           "fit"                 "fit_summary"        
## [19] "gg"                  "groups"              "i"                  
## [22] "index"               "index_mat"           "itemek"             
## [25] "items"               "items_to_flip"       "likert_valtozok"    
## [28] "lt"                  "marginal_means"      "mat"                
## [31] "mat1"                "mat2"                "mat3"               
## [34] "model"               "model_dat"           "model_dat_long"     
## [37] "model_syntax"        "MOGQ_social"         "MOGQ_social_itemek" 
## [40] "mydat"               "mylist"              "my_sequence"        
## [43] "n"                   "newfac"              "nice_table"         
## [46] "packs"               "plotAnova"           "plot_dat"           
## [49] "pred_means"          "pred_table"          "pred_tables"        
## [52] "print.specialVector" "results"             "runAnova"           
## [55] "skala"               "skala_definiciok"    "skala_nevek"        
## [58] "skalapontok"         "temporary"           "vec"                
## [61] "vec_char"            "vec_down"            "vec_int"            
## [64] "vec_logic"           "vec_num"             "vec.reference"      
## [67] "vec.target"          "vec_up"              "x"                  
## [70] "y"
# keresési út módosítása
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 betöltése
data(dyslex)

results matching ""

    No results matching ""