在这里查看我的另一个更好的答案:
https://stackoverflow.com/a/26098290/134830
像列表这样的参差不齐的对象不能很好地适应数据库表的矩形特性。您有几个选项可以解决此限制。
使用dput 将您的列表转换为文本,并将其存储在文本列中。然后dget它从数据库中检索回来。
您还可以将数据作为 XML 或 JSON 存储在文本列中,并在检索时对其进行解析。
如果您不关心内容的可读性,您也可以将其存储为二进制 blob,使用 saveRDS(并使用 readRDS 检索它)。
所有这些方法都有一个缺点,即您无法对它们进行数据库内分析。它们只适合将数据库用作数据存储介质。
如果您想使用数据库中的数据,您必须make it rectangular。
有关 RDS 方法的更多详细信息。这实际上比我最初预期的要痛苦,因为是的,您需要写入文件。
l <- list(x = 1:5, y = letters)
saveRDS(l, "tmp")
bits <- readBin("tmp", "raw", 1000)
# Then send the raw data to the DB
# On retrieval reverse the process
writeBin(x, "tmp")
readRDS("tmp")
RDS 方法的一种可能更简单的替代方法。
bits <- charToRaw(paste0(deparse(l), collapse = ""))
# And the reverse:
eval(parse(text = rawToChar(bits)))