2010-10-17 65 views
8

我工作的一個項目,我有很多的分析家創造R.統計模型的他們通常提供給我的模型對象(.Rdata文件)和我自動執行它們的各種數據集。序列化.RData文件數據庫

我的問題是:

  • 我可以使用一個數據庫,並有保存這些文件.RData?任何暗示這樣做? (我目前將.Rdata文件存儲到磁盤並使用數據庫存儲位置信息)

  • 我從其他分析師那裏得到很多R腳本,他們在創建模型之前對數據進行了一些預處理。有沒有人有使用PMML的經驗,使這個過程可重複無需人工干預? PMML將預處理步驟,建模步驟存儲爲標記標記,並將在新數據集上重複相同步驟。

感謝您的建議和反饋。

-Harsh

回答

6

是的,這是可能的使用鏈接至R與RMySQLDBI包例如MySQL中,或經由RODBCRJDBC包。我不是100%確定它們是否都支持blob,但最糟糕的情況是,您可以使用ascii表示並將它們放在文本字段中。

訣竅是使用功能serialize()

> x <- rnorm(100) 
> y <- 5*x+4+rnorm(100,0,0.3) 
> tt <- lm(y~x) 
> obj <- serialize(tt,NULL,ascii=T) 

現在你可以存儲或數據庫中檢索OBJ。它實際上不過是一個ascii(或二進制)代碼的向量。 ascii = F給你一個二進制表示。取回後,您可以使用:

> unserialize(obj) 
Call: 
lm(formula = y ~ x) 

Coefficients: 
(Intercept)   x 
     4.033  4.992 

編輯:關於PMML,有一個pmml包上CRAN。也許那個讓你到某個地方?

+0

即使斑點不支持,你可以序列化/反序列化,並從ASCII(因爲你甚至在你的例子一樣),然後保存ASCII字符串。 – 2010-10-17 23:23:14

+0

我以爲我這麼說?我說錯了嗎? – 2010-10-17 23:25:23

+1

注意,ASCII序列obj爲16K字節大(長(OBJ)),二進制版本是11K字節大,但如果保存(「TT」,文件=「tt.RData」),你得到的東西只有5K大。 – Spacedman 2010-10-18 07:41:17

2

R可序列化和反序列化任何對象,這是我的digest包是如何創建所謂的「散列摘要」通過在序列化對象運行的哈希函數。

所以,一旦你的序列化對象(可序列化到character),其存儲。任何關係數據庫都會支持這一點,就像NoSQL鍵/值存儲一樣 - 對於任何後端,您甚至可以使用「散列摘要」作爲關鍵字或其他元信息。

其他替代方法如RProtoBuf也可以非常有效地序列化和反序列化(但是您必須先編寫.proto文件)。

+0

NoSQL的想法似乎很有吸引力。 R的新東京內閣包可以幫助這裏。 – harshsinghal 2010-10-18 08:31:49

2

。請注意,.RData文件可以包含很多[R對象,所以你需要決定如何處理這一點。如果你附上。RDATA文件,你可以得到的對象在它與LS()用pos參數:

> attach("three.RData") 
> ls(pos=2) 
[1] "x" "y" "z" 

那麼你可以遍歷他們,得到()他們的名字從位置,並將其序列化到一個列表(第是我的列表索引)

> s=list() 
> p=1 
> for(obn in obnames){ 
+ s[[p]] = serialize(get(obn,pos=2),NULL,ascii=TRUE) 
+ p=p+1 
+ } 

現在你要送的元素噴到你的數據庫,大概在名稱(某種焦炭)和Value(序列化的數據,一個BLOB或VARCHAR的表我猜)。

1

正如其他人所說,是的,你可以從模型的輸出存儲在數據庫中的文本。儘管如此,我不相信這對你會很有用。

如果您希望能夠在以後的日子中重新創建這些模型,那麼你需要存儲的輸入數據集和代碼創建的模型,而不是輸出。

當然,你可以存儲模型輸出爲好,在這種情況下,你需要考慮其在數據庫格式。如果您希望能夠找到特定的模型結果並對其進行過濾或排序,那麼使用某種結構(以及一些元數據)將它們添加到數據庫會更容易。

例如,您可能要檢索,那裏有一個顯著性別響應所有車型。在這種情況下,您需要將該信息作爲數據庫中的單獨字段添加,而不必搜索ascii的塊。添加其他信息(如模型創建者和創建日期)也將在以後幫助您。

+0

你似乎已經觸及了我的問題的各個方面。我試圖創建一種方法來「標記」glm模型對象中的獨立變量,以及如果從源數據列(及其轉換)派生的某些變量。目前,我保存了創建它的模型和R腳本,但我想創建一個更通用的結構來重新跟蹤從數據到模型對象的路徑。 – harshsinghal 2010-10-18 21:13:30