事象
特定のデータにてmin関数、max関数、range関数などが正しく機能しない
数値が入った変数hogeにて最大値が10以上であるに関わらず以下のように出力される。
> range(hoge) [1] "0" "9.99993895163879"
原因/解決策
変数hogeが文字列として扱われている
> mode(hoge) [1] "character"
as.numericをかませれば解決
> max(as.numeric(hoge)) [1] 17.84708
以下、補足です。
補足
R言語では型をよしなに扱ってくれるケースがあり、例えば文字列が格納されているデータもplot関数に入れると数値として出力されます。
一方でmin、max、range等は引数が文字列であれば文字列としてソートを行い結果を返します。これはこれで便利ですが、数値として認識している場合は挙動がおかしくなります。
やっかいなのが、値の範囲が10~99等の場合です。
この場合は文字列でも問題なくmin等で欲しい結果が出てしまいます。
一方、0~9、例えば9.999などがあればそれが最も大きい値として出力されてしまいます。
この動きを覚えていないと、グラフ出力する際に自動的にrange()を用いて範囲が取得されることで端が切れたグラフになってしまいます。
以上、max関数などで値が取得できない際は数値として扱えているか疑った方がよい、という備忘録でした。