Сохранить R график на веб-сервере - PullRequest
9 голосов
/ 20 июля 2010

Я пытаюсь создать процедуру, которая извлекает данные с сервера MySQL (используя пакет RODBC), выполняет некоторые статистические процедуры для этих данных в R, а затем сохраняет сгенерированные графики обратно на сервер, чтобы их можно было извлечь ввеб-браузер через немного php и веб-магии.

Я планирую сохранить график в поле BLOB MySQL, используя пакет RODBC для выполнения вставки SQL в оператор.Я думаю, что я могу вставить данные непосредственно в виде строки.Проблема в том, как мне получить строку данных и будет ли это вообще работать?Моя лучшая мысль - использовать функцию savePlot, чтобы сохранить временный файл и затем каким-то образом прочитать его обратно.

Кто-нибудь пробовал это раньше или есть предложения о том, как подойти к этому?

Ответы [ 3 ]

2 голосов
/ 20 июля 2010

Независимо от того, думаете ли вы, что это ужасная идея, вот рабочий ответ, который я смог собрать из этого сообщения

## open connection
library(RODBC)
channel <- odbcConnect("")

## generate a plot and save it to a temp file
x <- rnorm(100,0,1)
hist(x, col="light blue")
savePlot("temp.jpg", type="jpeg")

## read back in the temp file as binary
plot_binary <- paste(readBin("temp.jpg", what="raw", n=1e6), collapse="")

## insert it into a table
sqlQuery(channel, paste("insert into test values (1, x'",plot_binary,"')", sep=""))

## close connection
odbcClose(channel)

Перед внедрением я обязательно позабочусь о том, чтобы решить, следует ли это использовать, а не использовать файловую систему серверов.

0 голосов
/ 21 июля 2010

Сохраните график на сервере и запишите имя файла в базу данных.Но есть вещь, которая называется Rapache и может помочь.Кроме того, у Jeroen Ooms есть несколько онлайновых демоверсий , включая веб-интерфейс для известного пакета R Graph Хэдли Уикхэма ggplot2.

0 голосов
/ 20 июля 2010

Хранение изображений в базах данных часто осуждается.Чтобы создать файл в памяти в R, вы можете использовать textConnection в качестве соединения.Это даст вам строку.Это будет работать, если вы не забудете установить правильный тип MIME и открыть соединение как двоичное.

...