multcompパッケージを使ってTukeyのアルファベット添え字を付けようとした際に、以下のエラーが発生することがあります。
Error: unexpected '=' in ...
この記事では、このエラーの原因と対処方法ついて紹介します。
エラー発生の環境
このエラーは、Tukey多重比較を行う際にmultcomp::glht
関数とmcp()
関数を使用し、iris$Species
のようなデータフレーム内の列を直接指定した場合に発生します。
対処方法
エラーが発生するコード
次のコードではエラーが発生します。
# パッケージの読み込み
library(multcomp)
# データ「iris」を読み込み
data("iris")
# アルファベットの出力
cld(glht(aov(iris$Sepal.Length ~ iris$Species),
linfct = mcp(iris$Species = "Tukey"))) # エラー発生
このエラーは、mcp()
内で変数の指定が不適切なために起こります。
修正コード
以下のいずれかの方法で修正可能です。
方法1: 変数名をダブルクォーテーションで囲む
# ダブルクォーテーションで囲む
cld(glht(aov(iris$Sepal.Length ~ iris$Species),
linfct = mcp("iris$Species" = "Tukey"))) # 正常動作
方法2: データフレームの列を直接参照せず、変数を定義する
# 変数を定義する
Sepal.Length <- iris$Sepal.Length
Species <- iris$Species
cld(glht(aov(Sepal.Length ~ Species),
linfct = mcp(Species = "Tukey"))) # 正常動作
この場合、Species
が変数として認識されるため、エラーが発生しません。
まとめ
エラー原因:mcp()
内で、データフレームの列名(例: iris$Species
)を適切に解釈できない。
対処方法:
- 変数名をダブルクォーテーションで囲む。
linfct = mcp("iris$Species" = "Tukey")
- データフレームの列を変数として定義し、直接参照を避ける。
Species <- iris$Species
動作環境やコードの実行順序を確認しながら、適切な方法でエラーを回避してください。
少しでもあなたの解析が楽になりますように!