2011-01-30 63 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)])