2017-02-10 135 views
0

我想保存到磁盤tibble有列表列(稍後在R中使用)。理想情況下,我想喜歡feather快速二進制格式,但是,它似乎並不支持列表中的cols:保存與列表列的磁盤到磁盤

test <- tibble(a= list(c(1,2), c(3,4))) 
feather::write_feather(test, 'test.csv') 

Error in writeFeather(x, path) : Not implemented: a is a list

我期待在readr包的方法能夠解決這個問題,但沒有一個我試過的似乎能夠。

我該怎麼做?

回答

2

您可以使用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

我對tidyverse的體驗是,它們不適用於包含列表的列。例如,來自dplyr的filter不適用於data.frame s內的列表。因此,對於不支持的操作,您會遇到支持此功能的功能。

如果你只是尋找一種方式在磁盤上存儲的任何對象 - [R,我建議你看看savesaveRDS(和loadreadRDS)。這將R對象序列化爲二進制格式。請注意,這僅適用於R會話之間的存儲,並且不能與其他分析工具(如Python或SPSS)互操作。

+0

你指的是基地R的'write.csv'嗎?因爲這也給了我一個錯誤:'EncodeElement'中的'unimplemented type'list'。 我想現在我將不得不規範我的數據。 – hdkrgr

+1

我正在引用,但我同意,即使這不是一個好的格式。我認爲一個簡單的二進制格式就是使用'saveRDS'。然而這與其他軟件包不能互換,並且純粹用於R會話之間。 –

+0

事實上,你也可以將你的價值減少到一個。 –