読者です 読者をやめる 読者になる 読者になる

izumotto blog

燃えるゴミは火曜と金曜

Rのread.tableで起きた特定行へのエラー

最近R言語を使い始めました。

 

主にネットワーク解析を行っていまして、データをRに渡す際にtxtファイルやcsvファイルを使うのですが、今回はtxtファイルをread.tableで読み込む際に起きたエラーの話。

 

データの構造

今回はネットワーク構造、具体的にはエッジの情報をファイルから渡すため、txtファイルの中身は以下のような構造をしています。

 

ノードA1 ノードB1 エッジの重みW1
ノードA2 ノードB2 エッジの重みW2
 …

※ 見やすいため全角スペースを使っていますが、実際は半角スペース区切りです

 

このようなデータを読み込ませる際のプログラムは以下。

 

d <- read.table("data.txt")

 

シンプルです。

これを有向グラフとし、エッジの重みを付加させる場合は以下。

 

g <- graph.data.frame(d[1:2], directed=T)
E(g)$weight <- d3

 

今までこれでやってきました。 

はじめてのR: ごく初歩の操作から統計解析の導入まで

はじめてのR: ごく初歩の操作から統計解析の導入まで

 

特定の行に対するエラー

そして、いつものようにデータを読み込ませようとした時、このエラーが現れました。

 

scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, でエラー:
 6761 行目には 3 個の要素がありません

 

なぬ?

 

実は、ノードには日本語が含まれており、txtファイルの時点で日本語が文字化けしている場合が今までもありました。

でも今回は、6761行目を確認しましたが、ちゃんと要素は3つあるんです

 

うーむ...

 

とりあえず、6761行目を取り除き、行を1つ詰めてから再びread.tableしました。

 

scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, でエラー:
 6761 行目には 3 個の要素がありません

 

なんだとっ!?

 

6761行目がエラーだと言うから6761行目を取り除いたのに、新人の6761行目もエラーだと!?

こうなったら力技。

6700行目辺り〜6800行目辺り全てを取り除き、再度read.table!

 

scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, でエラー:
 6761 行目には 3 個の要素がありません

 

お手上げです。

 

これはもう、6761行目にあるデータに問題があるとは思えません。

きっと、どこかの行の何かのデータが悪さして、それが6761行目にしわ寄せされているんだろう(予想)。

Rによるデータサイエンス-データ解析の基礎から最新手法まで

Rによるデータサイエンス-データ解析の基礎から最新手法まで

 

解決策

いろいろ試行錯誤しましたが、最終的に以下のread.table文で読み込みに成功しました!

 

d <- read.table("data.txt", sep=" ", quote="", comment.char="")

 

これは、

  • sep=" " :区切り文字は半角スペースだと明記
  • quote="" :引用文字は使っていないことを明記
  • comment.char="" :コメントは使っていないことを明記

という3明記をすることで、無事に読み込み成功しました。

いろいろあるんですね〜。

ちなみに、sep=" "だけを指定で8954行目にエラー、quote=""を追加すると17480行目にエラーが出て、最後にcomment.char=""を追加で通りました(笑)

 

だいぶ心が折れそうでしたが、なんとか折れずに頑張れそうです。

 

「折れない心」をつくるたった1つの習慣 (プレイブックス 919)

「折れない心」をつくるたった1つの習慣 (プレイブックス 919)