Help us understand the problem. What is going on with this article?

tbl_df を使ってラップしたdata.frameをbnlearnに食わすとエラー

More than 3 years have passed since last update.

bnlearnでのエラー

bnlearnを使っていて、妙なエラーが出ました。

"... variable hoge must have at least two levels.

bnlearnの構造学習を行う関数に入れる際にすべてのフィーチャーをfactor化する必要があったのですが、前後の処理をいろいろ変えていくうちに、このエラーが出始めました。

factor化は以下のように一括でやっています。

dataset[] <- lapply(dataset, as.factor)

変換後のデータを見ても、特にlevelが2を下回っているものはありません。
Stackoverflowのこのエントリを見て、levelが1のものを削除するのはできますが、そもそもそんな列はない!
Remove variables with factor level 1 - stackoverflow

x[, sapply(x, nlevels) > 1]

もう少し調べるとbnlearnで同じことで困っている人がいましたが、最初見たときは、回答に再現しないよ、と書いてあって、空振りと思いました。

Error in bnlearn: variable has 5 levels but I get the error “ variable arb_review must have at least two levels.”

結局

でも最後にぼそっと、tibbleになったdata.frameを使うな!と書いていました。
これでした。ラッパーを外して、data.frameに戻したらうまく動きました!

追記

どうも同じような不具合がdealパッケージでも起こることがわかりました。基本tbl_dfなどは使わないほうがよさそうですね。。。

Masutani
データサイエンティストをしています。地理空間情報系の処理を主に扱っています。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away