2012-04-24 70 views
0

我有用sink() - 「file.txt」創建的文件列表。該文件包含一個列表,它看起來像這樣,它只包含numers:如何從R中的文件讀取列表?

[[1]] 
[1] 1 2 
[[2]] 
[1] 1 2 3 

如何在數據從這樣的文件列表讀取?

版: 我要去嘗試讀取它作爲一個字符串,然後使用正則表達式的一些去除'[[*]]',並用特殊符號代替'[*]' - 讓它成爲'@'。然後取出'@'之間的每個子串,將其分解爲向量並放入空列表中。

+0

它是對象的唯一的人類可讀表示:試圖將其轉換回列表會很麻煩並容易出錯。使用'save' /'load'或者如果你想要可移植和可讀的東西,從'RJSONIO'包中'toJSON' /'fromJSON',將它作爲一個對象保存起來更加安全和容易。 – 2012-04-24 22:59:15

+0

我知道,但問題是有人以這種方式保存列表(使用sink()),現在我必須再次將它作爲列表讀取。 – Qbik 2012-04-24 23:01:21

回答

1

像這樣的東西應該做的伎倆。 (具體細節可能會有所不同,但至少這會給你一些想法的工作。)

l <- readLines("file.txt") 

l2 <- gsub("\\[{2}\\d+\\]{2}", "@", l)   # Replace [[*]] with '@' 
l3 <- gsub("\\[\\d+\\]\\s", "", l2)[-1]   # Remove all [*] 
l4 <- paste(l3, collapse=" ")     # Paste together into one string 
l5 <- strsplit(l4, "@")[[1]]     # Break into list 
lapply(l5, function(X) scan(textConnection(X))) # Use scan to convert 2 numeric 
# [[1]] 
# [1] 1 2 
# 
# [[2]] 
# [1] 1 2 3