🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

Q&A

解決済

1回答

4160閲覧

R studioでread.transactions(file)の読み込みエラー

penguinn

総合スコア5

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

0グッド

0クリップ

投稿2019/09/22 05:00

前提・実現したいこと

R studioでlibrary(arules)を使ってアソシエーション分析を行おうとしています。
コンマ区切りのデータ(x.txt)を読み込みたいのですがエラーが発生してしまいます。
また、警告メッセージについても何が起きているか分かりませんでした。

x.txtのデータの上から3行は以下のイメージです。(データが公開出来ないものなので)
実際のデータではアルファベットに、日本語の無数にある固有名詞が入ります。
行数は約30万行あります。
1行を1transactionとして考えています。
各行には重複の要素がありますが削除せず別々の要素として読み込ませたいです。
各行の要素数は不定です。(要素数>1)

--- x.txt ---

A,B,C,A
D,E,A
F,G,H,I

発生している問題・エラーメッセージ

validObject(.Object) でエラー:
invalid class “ngCMatrix” object: row indices are not sorted within columns
追加情報: 警告メッセージ:
scan(text = l, what = "character", sep = sep, quote = quote, で:
クオートで囲まれた文字列中にEOFがあります

該当のソースコード

y <- read.transactions(file='x.txt',sep=',',format='basket',rm.duplicate=T)

R言語

試したこと

x.txtの行数を数千程度にしたところエラーが発生せずに読み込まれました。

補足情報(FW/ツールのバージョンなど)

RStudio
Version 1.2.1335

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

おそらく、引用符を含みかつその引用符に対応する「閉じるほうの引用符」が欠落している行があるのではないでしょうか。入力ファイルを適当に分割して入力し、どの行で問題が発生するのかを確かめてみてください。

投稿2019/09/22 05:39

KojiDoi

総合スコア13692

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

penguinn

2019/09/22 07:49

ご回答ありがとうございます。 入力ファイルを分割したところ、エラーがある行が見つかりましたが特に他の行との違いが見られず何が原因か分かりませんでした。そして、エラー行を削除して実行しましたがまだエラーが発生したので複数のエラー行がある状況みたいです。一方、エラー行と他の数行だけのファイルを作り読み込ませた所、その時はエラーが発生しませんでした。
penguinn

2019/09/22 10:21

そちらのQ&Aではlist型をtransaction型に変える時の場合で、 変える前にdata<-lapply(data,sort)の処理をしてあげる事でエラーが回避されるみたいですね。今回の場合、.txtをそのままtransacition型として読み込みたいので適用が難しそうでした。 x.textをx.csvとしてread.csv()をすると読み込みは可能なのですが列数が異なるため、 A,B,C,A D,E,A, F, , , のように最大の列数に合わせるように空の要素も読み込まれてしまいます。 なのでread.transaction()を使いたいということになります。
KojiDoi

2019/09/22 15:03

列数が一定でないことだけが問題なら、 sapply( readLines("x.txt"), function(x){strsplit(x, ",")}) のようにすれば各行のデータを内容とするリストが得られると思いますが、これではダメなんでしょうか。
penguinn

2019/09/22 16:12

教えて頂いたコードでリストを作り、先ほどのQ&Aの処理を実行しましたが同じエラーがでてしまいました。 しかし最初の方法で、エラーがある行を全部削除し実行したところ、無事に読み込むことが出来ました。 エラーの行は2行有り、 A,A,A,A B,B,B のように同じ要素のみで成る行でした。同様の行でエラーを出さない行もあるので原因は分かりませんでした。 ですが、読み込みが可能となったので解決と致します。 親切に何度も御回答して頂きありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問