एक उदाहरण आर चर, कि काफी जटिल है:
library(nlme)
model <- lme(uptake ~ conc + Treatment, CO2, random = ~ 1 | Plant/Type)
सबसे अच्छा आर चर के लिए भंडारण डेटाबेस विधि आप इसे कैसे उपयोग करना चाहते हैं पर निर्भर करता है।
मैं
में डेटाबेस विश्लेषिकी मूल्यों पर करने के लिए इस मामले में की जरूरत है, तो आप वस्तु मान जो डेटाबेस देशी रूप संभाल कर सकते हैं में टूट की जरूरत है। इसका आमतौर पर इसका मतलब है एक या अधिक डेटा फ्रेम में परिवर्तित करना। ऐसा करने का सबसे आसान तरीका broom
पैकेज का उपयोग करना है।
library(broom)
coefficients_etc <- tidy(model)
model_level_stats <- glance(model)
row_level_stats <- augment(model)
मैं सिर्फ भंडारण
इस मामले आप अपने अनुसंधान चर क्रमानुसार करने चाहते हैं चाहते हैं। यही है, उन्हें एक स्ट्रिंग या बाइनरी ब्लॉब के रूप में परिवर्तित करना। इसके लिए कई तरीके हैं।
मेरे डेटा, आर के अलावा अन्य कार्यक्रमों के द्वारा सुलभ हो गया है और मानव पठनीय होने की जरूरत है
आप एक पार मंच पाठ प्रारूप में अपने डेटा स्टोर करना चाहिए; शायद जेएसओएन या वाईएएमएल। JSON Inf
जैसी कुछ महत्वपूर्ण अवधारणाओं का समर्थन नहीं करता है; वाईएएमएल अधिक सामान्य है लेकिन आर में समर्थन परिपक्व नहीं है। एक्सएमएल भी संभव है, लेकिन बड़े एरे भंडारण के लिए उपयोगी होने के लिए भी वर्बोज़ है।
library(RJSONIO)
model_as_json <- toJSON(model)
nchar(model_as_json) # 17916
library(yaml)
# yaml package doesn't yet support conversion of language objects,
# so preprocessing is needed
model2 <- within(
model,
{
call <- as.character(call)
terms <- as.character(terms)
}
)
model_as_yaml <- as.yaml(model2)
nchar(model_as_yaml) # 14493
मेरे डेटा आर के अलावा अन्य कार्यक्रमों के द्वारा सुलभ हो गया है, और मानव पठनीय होने की जरूरत नहीं है
आप एक खुले, पार मंच के लिए अपने डेटा लिख सकता है एचएफडी 5 जैसे बाइनरी प्रारूप। वर्तमान में एचएफडी 5 फाइलों के लिए समर्थन (rhdf5
के माध्यम से) सीमित है, इसलिए जटिल वस्तुएं समर्थित नहीं हैं। (आप शायद unclass
सब कुछ करने की आवश्यकता होगी।)
library(rhdf5)
h5save(rapply(model2, unclass, how = "replace"), file = "model.h5")
bin_h5 <- readBin("model.h5", "raw", 1e6)
length(bin_h5) # 88291 not very efficient in this case
feather
पैकेज आइए आप एक प्रारूप में डेटा फ्रेम दोनों आर और अजगर द्वारा पठनीय सहेजें।इसका उपयोग करने के लिए, आपको पहले मॉडल ऑब्जेक्ट को डेटा फ्रेम में कनवर्ट करना होगा, जैसा कि उत्तर में ब्रूम अनुभाग में वर्णित है।
library(feather)
library(broom)
write_feather(augment(model), "co2_row.feather") # 5474 bytes
write_feather(tidy(model), "co2_coeff.feather") # 2093 bytes
write_feather(glance(model), "co2_model.feather") # 562 bytes
एक अन्य विकल्प (पिछले अनुभाग देखें) ज़िपित फाइल करने के लिए डेटाबेस में चर का एक पाठ संस्करण बचाने के लिए और अपने बाइट्स स्टोर करने के लिए है।
writeLines(model_as_json)
tar("model.tar.bz", "model.txt", compression = "bzip2")
bin_bzip <- readBin("model.tar.bz", "raw", 1e6)
length(bin_bzip) # only 42 bytes!
मेरे डेटा केवल आर द्वारा सुलभ होने की जरूरत है, और मानव पठनीय
वहाँ एक स्ट्रिंग में एक चर बदल लिए दो विकल्प हैं की जरूरत है: serialize
और deparse
।
p <- function(x)
{
paste0(x, collapse = "\n")
}
serialize
एक पाठ कनेक्शन के लिए भेजा जाना है, और बजाय फाइल करने के लिए लिखने की तुलना में, आप कंसोल के लिए लिख सकते हैं और यह कब्जा कर सकते हैं की जरूरत है।
model_serialized <- p(capture.output(serialize(model, stdout())))
nchar(model_serialized) # 23830
control = "all"
साथ उपयोग deparse
जब बाद में फिर से पार्स करने उलटने अधिकतम करने के लिए।
model_deparsed <- p(deparse(model, control = "all"))
nchar(model_deparsed) # 22036
मेरे डेटा केवल आर द्वारा सुलभ होने की जरूरत है, और मानव पठनीय
यहां पिछले अनुभाग में दिखाया तकनीक का एक ही प्रकार लागू किया जा सकता होने की जरूरत नहीं है । आप एक धारावाहिक या विकृत चर को ज़िप कर सकते हैं और कच्चे वेक्टर के रूप में इसे फिर से पढ़ सकते हैं।
serialize
बाइनरी प्रारूप में चर भी लिख सकते हैं। इस मामले में, इसका उपयोग आसानी से इसके रैपर saveRDS
के साथ किया जाता है।
zz<-textConnection('tempConnection', 'wb')
saveRDS(myData, zz, ascii = T)
TEXT<-paste(textConnectionValue(zz), collapse='\n')
#write TEXT into SQL
...
closeAllConnections() #if the connection persists, new data will be appended
#reading back:
#1. pull from SQL into queryResult
...
#2. recover the object
recoveredData <- readRDS(textConnection(queryResult$TEXT))
यह आखिरी वाला _very_ अक्षम है। 'saveRDS' ऑब्जेक्ट को फ़ाइल में लिखता है, और फिर' readBin' इसे स्मृति में पढ़ता है। जहां तक मुझे पता है, 'serialize' सीधे' कनेक्शन = NULL' के साथ स्मृति में लिखता है। –