将包含列表列的tibble保存到磁盘

5
我希望能够将一个具有列表列的tibble保存到磁盘中(仅供日后在R中使用)。最好使用像feather这样的快速二进制格式,但它似乎不支持列表列:
test <- tibble(a= list(c(1,2), c(3,4)))
feather::write_feather(test, 'test.csv')

写入Feather(x, path)时出错:未实现,a是列表

我原以为readr包中的方法能够处理这个问题,但我尝试过的方法都无法解决。

我该怎么做?

2个回答

12

您可以使用saveRDSreadRDS函数:

library(tibble)
test <- tibble(a= list(c(1,2), c(3,4)))
saveRDS(test, "c:/test.rds")
test_2 <- readRDS("c:/test.rds"))
identical(test, test_2)

readr包中,有read_rdswrite_rds函数,甚至允许设置压缩。


1
遗憾的是,当您读取保存在RDS文件中的tibble时,字符串列会被读取为因子数据类型。 - aldo_tapia

2
我的经验是,tidyverse 无法处理包含列表的列。例如,dplyr 的 filterdata.frame 中无法正确工作。因此,对于不支持的操作,您只能使用支持此操作的函数。
如果您只是想要将任何 R 对象存储在磁盘上,我建议您查看 savesaveRDS(以及 loadreadRDS)。这会将 R 对象序列化为二进制格式。请注意,这仅在 R 会话之间用作存储,并且与其他分析工具(如 Python 或 SPSS)不兼容。

你是指基本的R语言中的write.csv吗?因为我也遇到了一个错误:unimplemented type 'list' in 'EncodeElement'。 我想现在我必须规范化我的数据。 - hdkrgr
1
我曾经参考过那个,但我同意即使那也不是一个好的格式。我认为使用saveRDS会更好,这是一个简单的二进制格式。然而,它不能与其他软件包互换,纯粹只能在R会话之间使用。 - Paul Hiemstra
实际上,您也可以将您的值减少到一个。 - Paul Hiemstra
你可以在list.frames上使用filter,只需要使用mutate/map步骤来应用filter即可。 - Jake Kaupp
@Paul Hiemstra:谢谢,将其缩减为单个值在这种情况下不太可行,但saveRDS正是我正在寻找的。很惊讶我以前从未遇到过它。 :) - hdkrgr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接