我在R中創建了一個對象序列化並將它們放入純文本文件的過程。這似乎是一種非常好的方式來處理事情,因爲我正在使用Hadoop,所有輸出都需要通過stdin和stdout進行流式處理。R:將對象序列化爲文本文件並返回
我剩下的問題是如何從文本文件中讀取這些對象,然後將其返回到我的臺式機上的R中。下面是一個工作示例,說明了這個挑戰:
讓我們創建一個tmp文件並將單個對象寫入其中。這個對象只是一個載體:
outCon <- file("c:/tmp", "w")
mychars <- rawToChar(serialize(1:10, NULL, ascii=T))
cat(mychars, file=outCon)
close(outCon)
的mychars對象看起來是這樣的:
> mychars
[1] "A\n2\n133633\n131840\n13\n10\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n"
當寫入文本文件,它看起來像這樣:
A
2
133633
131840
13
10
1
2
3
4
5
6
7
8
9
10
我可能忽略了非常明顯的東西,但是如何將該文件讀回R並反序列化該對象?當我嘗試scan()或readLines()時,都希望將新行字符當作記錄分隔符,並且最終得到一個向量,其中每個元素都是文本文件中的一行。我真正想要的是一個包含文件全部內容的文本字符串。然後我可以反序列化字符串。
Perl會將換行符讀回字符串,但我無法弄清楚如何重寫R處理換行符的方式。
回想起來,我應該把我的對象保留爲原始狀態,我會確定並注意到,當我將從R on Hadoop中學到的經驗融合在一起時,看起來像缺少readChar()函數再次感謝Dirk! – 2010-02-13 18:22:39
沒錯。我完全忘記插入我們的RProtoBuf軟件包,這當然也有幫助!目前還沒有Windows二進制文件,因爲我們沒有MinGW構建的適合與R鏈接的庫。 – 2010-02-13 18:34:29