Вопрос

Я работаю над проектом, в котором у меня много аналитиков, создающих статистические модели в R., они обычно предоставляют мне модельные объекты (файлы .rdata), и я автоматизирую, выполняющую их для различных наборов данных.

Моя проблема в том,

  • Могу ли я использовать базу данных и сохранить эти файлы .rdata там? Любые намеки на это делать? (В настоящее время я храним файлы .rdata на диск и используете базу данных для хранения информации о местоположении)

  • Я получаю много сценариев R других аналитиков, которые сделали некоторую предварительную обработку данных, прежде чем они создают модели. У кого-нибудь есть опыт использования PMML, чтобы сделать этот процесс повторять без ручного вмешательства? PMML хранит шаги предварительной обработки, моделирующие шаги как метки Markup, и повторят одинаковую на основе нового набора данных.

Спасибо за предложения и отзывы.

-Жесткий

Это было полезно?

Решение

Да, это возможно, например, MySQL, связанный с r с RMySQL а также DBI пакет или через RODBC или RJDBC упаковка. Я не на 100% уверен, что если бы они все поддерживают BLOBS, но в худшем случае вы можете использовать представление 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 пакет на кран. Может быть, что кто-то дает тебе где-то?

Другие советы

Г может сериализовать и десериализировать Любые объект, вот как мой переварить Пакет создает так называемые «хэш-накопители», запустив хеш-функцию над сериализованным объектом.

Так как только у вас есть сериализованный объект (который может быть сериализован character), Храните его. Любая реляционная база данных будет поддерживать это, так как будет ли в качестве ключа / значений / значений NoSQL - и для любого бэкэнда, которую вы даже можете использовать «хэш-перевадку» в качестве ключа, либо какую-то другую мета-информацию.

Другие альтернативы, например, Rprotobuf. которые также могут также сделать сериализовать и десериализовать очень эффективно (но вам придется сначала написать файлы .proto).

Обратите внимание, что файл .rdata может содержать множество объектов R, поэтому вам нужно решить, как иметь дело с этим. Если вы прикрепите файл .rdata, вы можете получить объекты в нем с помощью LS () с аргументом POS:

> 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 к вашей БД, вероятно, в таблице имени (какой-то картин) и значение (сериализованные данные, BLOB или Varchar, я думаю).

Как упомянули другие, да, вы можете хранить выходы из моделей в виде текста в вашей базе данных. Я не убежден, что это будет очень полезно для вас, хотя.

Если вы хотите иметь возможность воссоздать эти модели с более поздней датой, вам необходимо хранить входной набор данных и код, который создал модели, а не вывод.

Конечно, вы могли бы сохранить вывод модели, и в этом случае вам нужно подумать о своем формате в базе данных. Если вы хотите иметь возможность найти определенные результаты модели и фильтровать или заказывать их, то будет намного проще, если вы добавите их в базу данных с какой-то структурой (и некоторыми метаданными).

Например, вы можете захотеть извлечь все модели, где был значительный гендерный ответ. В этом случае вам необходимо добавить эту информацию как отдельное поле в базе данных, а не на необходимость поиска по кускам ASCII. Добавление другой информации, такой как Model Creator и дата создания, также поможет вам позже.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top