将具有可变列数的文本文件读取到列表中

时间:2011-01-30 13:23:36

标签: list file r

我有一个这样的文件:

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

3 个答案:

答案 0 :(得分:19)

假设空格是分隔符:

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

修改

如果值由多个空格分隔(以/或以不一致的方式),则可以将分隔符与正则表达式匹配:

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)

答案 1 :(得分: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)] )

我想知道是否有更简单的方法。

答案 2 :(得分:1)

您可以使用lapply代替sapply

来简化第二行
    lapply(l, function(x)x[!is.na(x)])