RのMASSパッケージ内のcorresp関数を用いたとき、エラーに悩まされたので、皆様と共有しておきます。
環境
Ubuntuのバージョン
cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.2 LTS"
Rのバージョン
R --version
R version 3.3.3 (2017-03-06) -- "Another Canoe"
Copyright (C) 2017 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)
R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under the terms of the
GNU General Public License versions 2 or 3.
For more information about these matters see
http://www.gnu.org/licenses/.
MASSのバージョン
packageVersion("MASS")
[1] ‘7.3.45
corresp.matrix(x, …) でエラー: empty row or column in table
corresp関数の引数xは、xtabs関数から作成したオブジェクトとします。
次のようなエラーが出力されたとする。これは、ある行または列の値がすべて0であるため、計算が実行できないことを表しています。
library(MASS)
corresp(x, nf = min(c(nrow(x), ncol(x))) - 1)
corresp.matrix(x, ...) でエラー: empty row or column in table
ある行がすべて0である場合は、次のようにしてその行を取り除きます。
# 行ごとに、各列の合計値が0を超える行を抽出
x <- x[rowSums(x) > 0, ]
ある列がすべて0である場合は、次のようにしてその列を取り除きます。
# 列ごとに、各行の合計値が0を超える列を抽出
x <- x[, colSums(x) > 0]
corresp.default(x, nf = 1) でエラー: invalid table specification
上記のような方法で、ある行または列を取り除いたxを用いてcorresp関数を使用した場合、次のようなエラーが出ます。
出力されたエラーにおいて、corresp関数の引数nfの値は、x次第であることに注意します。
corresp(x, nf = min(c(nrow(x), ncol(x))) - 1)
corresp.default(x, nf = 1) でエラー: invalid table specification
この対処方法は、xをもう一度xtabs関数を適用したxにすれば良いです。
例えば、次のコードのようにxを一度データフレームに変換して、xtabs関数へ渡します。行名と列名は適宜変更してください。
x <- xtabs(Freq ~ [行名] + [列名], data=as.data.frame(x))
このxをcorresp関数に渡せば、エラーなく処理が完了します。
corresp(x, nf = min(c(nrow(x), ncol(x))) - 1)
R×MASS corresp関数のエラー対処方法