【R】multcomp::mcp( )でError: unexpected ‘=’ in …が出る時の対処方法

R

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)を適切に解釈できない。

対処方法

  1. 変数名をダブルクォーテーションで囲む。
    linfct = mcp("iris$Species" = "Tukey")
  2. データフレームの列を変数として定義し、直接参照を避ける。
    Species <- iris$Species

動作環境やコードの実行順序を確認しながら、適切な方法でエラーを回避してください。

少しでもあなたの解析が楽になりますように!

タイトルとURLをコピーしました