2011-12-26 23 views
9

the following linkに記載されている固定幅構造を使用してthis file(3.8mb)を読み込もうとしています。read.fwfと番号記号

このコマンド:

a <- read.fwf('~/ccsl.txt',c(2,30,6,2,30,8,10,11,6,8)) 

は、エラーが発生します。

line 37 did not have 10 elements

スキップオプションの異なる値で問題を複製した後、私はすべての問題を引き起こし行は「#が含まれていることを考え出し"記号。

回避策はありますか?

+1

+1質問に答えるために必要な情報を含む良い質問をお寄せいただきありがとうございます。 –

答えて

11

@jverzaniが既にコメントしたように、この問題はおそらく#記号がコメントを通知する文字としてよく使われるという事実でしょう。 comment.char入力引数read.fwfを#以外の値に設定すると、問題を解決できます。以下では、問題の原因となる文字(例:'s、オランダの都市名's Gravenhage)で使用できる、より一般的なケースとして回答を残します。

この問題は、他のシンボルで発生しています。私が取ったアプローチは、単に#を何もないか、エラーを生成しない文字で置き換えることでした。私の場合、文字を単に置き換えるだけで問題はありませんでしたが、これはあなたのケースでは不可能かもしれません。

私のアプローチは、エラーを生成するシンボルを削除するか、別の文字で置き換えることです。これは、テキストエディタ(検索と置換)、Rスクリプト、またはgrepsedと呼ばれるいくつかのLinuxツールを使用して行うことができます。 Rスクリプトでこれを行う場合は、scanまたはreadLinesを使用して行を読み取ります。テキストがメモリに保存されたら、subを使用して文字を置き換えることができます。

文字を置き換えることができない場合は、エラーが発生しない文字で文字を置き換え、read.fwfを使用してRに読み込み、最後に#文字で置き換えます。

+5

comment.char = ""と言うと、別のコメント文字を渡すと思っていました。 (read.tableを参照) – jverzani

+0

これを答えとして追加することができれば、それは素晴らしいことでしょう!私の答えは、(それはオランダの都市名でこの問題を抱えていた)どんなキャラクターケーシングトラブルでも機能するので、少し一般的です。 –

+0

ありがとう、@ jverzaniの先端は問題を解決しました。 – Alex

4

上記の答えにフォローアップ:read.fwfへの呼び出しで(後者はオランダ語固有名詞での単一引用符と@ PaulHiemstraの問題の世話をする)、リテラルとして読み込まれるすべての文字を取得comment.char=""quote=""の両方を使用します(これは?read.tableに記載されています)。

+0

read.fwfでquote = ""を使用すると、エラーが発生します。read.table(file = FILE、header = header、sep = sep、row.names = row.names、: 仮引数 "quote"複数の実際の引数と一致する – panterasBox

+0

あなたは正しい - 'quote =" "'は*必要ではありません*、 'read.table'は' quote = "" 'で内部的に呼び出されます。しかし、これとは別に、別の質問を投稿してください... –