2011-01-30 66 views
15

我有一個文件是這樣的:閱讀與列的可變數量的文本文件列表

mylist.txt 
234984 10354 41175 932711 426928 
1693237 13462 

這個文件的每一行具有不同數量的元素,每行1個元件的最小值。 我想讀取到像這樣的列表:

> print(head(mylist,2)) 
[[1]] 
[1] 234984 10354 41175 932711 426928 

[[2]] 
[1] 1693237 13462 
+0

由於簡化第二代線您的示例列表項顯示數字之間保留的空格,不清楚您是否希望每行都是長字符串或數字向量。 – 2011-01-30 18:02:00

+0

矢量數字。我不確定它爲什麼顯示空格。無論如何,aL3xa答案似乎工作得很好。 – pms 2011-02-02 11:25:40

回答

19

假設空間分隔符:

fc <- file("mylist.txt") 
mylist <- strsplit(readLines(fc), " ") 
close(fc) 

編輯:

如果值是由幾個空間(一個/或unconsistent方式),可以匹配定界符正則表達式限定:

mylist.txt 
234984 10354 41175 932711  426928 
1693237    13462 

fc <- file("mylist.txt") 
mylist <- strsplit(readLines(fc), " +") 
close(fc) 

編輯#2

而且由於strsplit返回字符串,您需要將數據轉換爲數字(這是一個容易):

mylist <- lapply(mylist, as.numeric) 
2

一個可能的答案是,首先閱讀充滿的NA列表,然後這樣刪除它們:

l<-as.list(as.data.frame(t(read.table("mylist.txt",fill=TRUE,col.names=1:max(count.fields("mylist.txt")))))) 
l<-lapply(l, function(x) x[!is.na(x)]) 

我不知道是否有是一個更簡單的方法。

1

您可以通過使用lapply代替sapply

lapply(l, function(x)x[!is.na(x)])