與MongoDB的使用對象我有這樣的代碼:如何序列化/反序列化ggplot爲R中
for(plot in plotResults) {
.session$plots[[plot$id]] <- if (!is.null(plot[["grob"]])) {
plot[["grob"]]
} else {
plot[["plot"]]
}
ggsave(paste0(plot$id, ".png"), .session$plots[[plot$id]])
...
}獲取生成
文件,但是當我保存ggplot對象使用該工具來蒙戈:
serializeObj <- function(obj) {
if (is.list(obj)) {
structure(lapply(obj, serializeObj), names = serializeNames(obj))
} else {
rawToChar(serialize(obj, NULL, ascii = TRUE))
}
}
deserializeObj <- function(obj) {
if (is.list(obj)) {
structure(lapply(obj, deserializeObj), names = unserializeNames(obj))
} else if (is.serialized(obj)) {
unserialize(charToRaw(obj))
} else {
obj
}
}
## Replaces characters illegal in Mongo names with "safe" substitutes
safeNames <- function(value) {
gsub("\\.", "___DOT___", value)
}
## Replaces back "safe" substitutes
unsafeNames <- function(value) {
gsub("___DOT___", ".", value)
}
serializeNames <- function(obj) {
lapply(names(obj), safeNames)
}
unserializeNames <- function(obj) {
lapply(names(obj), unsafeNames)
}
我跑serializeObj之前,我保存到蒙戈再後來deserializeObj從蒙戈讀取之後。讀取代替ggplot對象後,我得到了列表,我無法在該列表中調用ggsave。
我該如何序列化某種類型的對象,如ggplot,然後反序列化它以獲得相同的對象?
ggplot是一個(嵌套的)列表。使用'str'來檢查。你的方法失去了屬性,最重要的是屬性。 – Roland
@Roland有沒有辦法恢復類屬性? – jcubic
'help(「attr」)'''help(「attributes」)',當然你需要先存儲它們。否則,我們正在談論一些子列表屬性的手動工作。 – Roland