我有一个这样的文件:
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 :(得分: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)])