Ошибка печати графика, извлеченного из блоба SQLite - PullRequest
0 голосов
/ 26 мая 2018

У меня есть рабочий процесс, в котором мне нужно сгенерировать некоторые данные в R, сгенерировать графики для данных, сохранить графики, а затем визуализировать их позже.Я использую SQLite для этого.Работает нормально, но только для ggplot2 участков.Когда я пытаюсь сохранить и заново отобразить базовые графики R, это не работает.Есть идеи?Использование версии R 3.3.0.Вот мой код:

library("ggplot2")
library("RSQLite")

# test data
dat <- data.frame(x = rnorm(50, 1, 6), y = rnorm(50, 1, 8))

# make ggplot
g <- ggplot(dat, aes(x = x, y = y)) + geom_point()

# make base plot
pdf("test.pdf") # need open graphics device to record plot headlessly
dev.control(displaylist="enable")
plot(dat)
p <- serialize(recordPlot(), NULL)
dev.off()

# make data frame for db insertion
df1 <- data.frame(baseplot = I(list(p)), ggplot = I(list(serialize(g, NULL))))

# setup db
con <- dbConnect(SQLite(), ":memory:")
dbGetQuery(con, 'create table graphs (baseplot blob, ggplot blob)')

# insert the data
dbGetPreparedQuery(con, 'insert into graphs (baseplot, ggplot) values (:baseplot, :ggplot)', 
                   bind.data=df1)

# get the data back out
df2 <- dbGetQuery(con, "select * from graphs")

# print the ggplot; not sure why I need 'lapply' for this to work...
lapply(df2[["ggplot"]][1], "unserialize")

# print the base plot
lapply(df2[["baseplot"]][1], "unserialize")
# Error: NULL value passed as symbol address

1 Ответ

0 голосов
/ 01 июня 2018

Частичный ответ на запись моих результатов: я не могу сказать, почему это происходит, но это не связано с sqlite.Такая же ошибка возникает сразу после сериализации сюжета:

dat <- data.frame(x = rnorm(50, 1, 6), y = rnorm(50, 1, 8))

pdf("test.pdf") # need open graphics device to record plot headlessly
dev.control(displaylist="enable")
plot(dat)
p <- serialize(recordPlot(), NULL)
dev.off()

unserialize(p) # !! Error: NULL value passed as symbol address
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...