我正在研究一个项目,其中我有很多分析师在R中创建统计模型。它们通常为我提供模型对象(.rdata文件),并且我自动执行它们以用于各种数据集。

我的问题是:

  • 我可以使用数据库并保存这些.rdata文件吗?有任何暗示吗? (我目前将.rdata文件存储到磁盘上并使用数据库存储位置信息)

  • 我从其他分析师那里获得了很多R脚本,他们在创建模型之前已经进行了一些预处理。是否有人使用PMML有经验使此过程无需手动干预即可重复? PMML存储预处理步骤,将步骤建模为标记标签,并在新数据集上重复相同。

感谢您的建议和反馈。

-残酷的

有帮助吗?

解决方案

是的,这是可以使用与r链接到r的mysql RMySQLDBI 包裹,或通过 RODBC 或者 RJDBC 包裹。我不确定它们是否都支持斑点,但是最坏的情况您可以使用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 包装在克兰上。也许那个把你带到某个地方?

其他提示

r可以序列化并进行序列化 任何 对象,这就是我的 消化 软件包通过在序列化对象上运行哈希函数来创建所谓的“哈希摘要”。

因此,一旦您拥有序列化对象(可以将其序列化为 character),存储它。任何关系数据库都将支持这一点,NOSQL键/值存储也将支持这一点 - 对于后端,您甚至可以将“哈希摘要”用作键或其他一些元信息。

例如其他替代方案 Rprotobuf 它也可以非常有效地序列化和去序列化(但是您必须先编写.proto文件)。

请注意,.rdata文件可以包含许多R对象,因此您需要决定如何处理。如果连接.rdata文件,则可以使用pos参数的ls()在其中获取对象:

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

然后,您可以循环浏览它们,从该位置逐个名称获取(),然后将它们序列化为列表(P是我的列表索引)

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

现在,您必须将S的元素压在DB中,可能是在名称表中(某种字符)和值(我猜是串行数据,blob或varchar)。

正如其他人提到的那样,是的,您可以在数据库中存储来自模型的输出。我不相信这对您非常有用。

如果您想在以后重新创建这些模型,则需要存储创建模型而不是输出的输入数据集和代码。

当然,您也可以存储模型输出,在这种情况下,您需要在数据库中考虑其格式。如果您想能够找到特定的模型结果并过滤或订购它们,那么如果将它们添加到数据库中,将使用某些结构(和一些元数据)添加到数据库中,这将变得容易得多。

例如,您可能需要检索所有模型,那里有重大的性别反应。在这种情况下,您需要将该信息添加为数据库中的单独字段,而不必搜索ASCII的块。添加其他信息,例如模型创建者和创建日期,也将为您提供帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top