2010-10-17 25 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