2011-01-30 18 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

lapplyを用いて第2のラインを簡素化することができあなたのサンプルリストの項目は数字の間に保存されたスペースを示していますが、各行を長い文字列にするか、数字のベクトルにするかははっきりしません。 –

+0

数字のベクトル。なぜそれがスペースを表示するのか分かりません。とにかく、aL3xaの答えはかなりうまくいくようです。 – pms

答えて

19

は、区切り文字である:

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

EDIT:値は、いくつかのスペース(/またはunconsistent方法で)で区切られている場合

、あなたは正規表現を区切り文字を一致させることができます:

mylist.txt 
234984 10354 41175 932711  426928 
1693237    13462 

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

EDIT#2

そしてstrsplit返す文字列から、あなたは(それは簡単なものだ)の数値にデータを変換する必要があります。

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

可能な答えは、最初のNASとの満たされたリストを読み、このようにそれらを削除することです:私は、もしそこに不思議

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

あなたはので、代わりにsapply

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

1.それが必要です。そうでなければ、read.tableは、ファイルの最初の5行の最大列数を読み取るためにいくつかの列をとります。 – pms

+0

@pms私のテストファイルには、最初の行の最大列数があります。私は私の答えを更新しました。 – csgillespie

+0

2.あなたは正しいです、私はそれを編集しました、あなたの発言に感謝します。 – pms

関連する問題