No.02943 R :数値行列のエラー  【mitsuhashi】 2007/03/07(Wed) 12:07

エクセルのファイルから.csv形式でエクスポートした先頭にラベルデータがあるデータからRを使ってデータ部分で行列演 算したいと思い,色々試したのですが「以下にエラー x %*% y : 数値行列またはベクトルが要求されます」というエラーで止まってしまいました。 y はベクトルで問題なかったのですが,以下のプログラムで取り込んだデータがきちんと数値行列になっていないということが分かりました。
x を数値行列として扱う(変換する)ためにはどのようにしたらよいのでしょうか?

または,ものすごく初歩的な勘違いなのでしょうか? ご教授頂けると幸いです。よろしくお願いします。

# --------- (プログラムの一部です)--------------
x <- read.csv("C:/R/data/data.csv",header=TRUE)
print(dim(x))
print("xは行列か?")
print(is.matrix(x))

# --------- 結果 --------------------------------
print(dim(x)) の出力はdata.csv の中身と同じ [1]100 5 となります
print(is.matrix(x)) の出力は [1]FALSE です。

No.02944 Re: R :数値行列のエラー  【青木繁伸】 2007/03/07(Wed) 12:58

R のオブジェクトがどの種類のものであるかを確認するには,class 関数を使うと良いでしょう。
データファイルの中身は,以下のようなものだったのでしょう。
X1,X2
1,5
3,7
6,4
5,3
8,3
これを,read.csv で読むと,データフレームになるんです。見かけは行列と似ていますが,あなたが経験したようなエラーが出ることがあります。つまり,データフレームは処理によっては行列とは区別される。
> x <- read.csv("data.csv", header=TRUE)
> x # 表示してみると,行列のように見えるが
X1 X2
1 1 5
2 3 7
3 6 4
4 5 3
5 8 3
> class(x) # x が何者であるかを調べると,データフレームであることが判明する
[1] "data.frame"
> x2 <- as.matrix(x) # これを行列にするには as.matrix 関数を使う
> x2 # x2 の見かけは,x と変わりがないように見えるが
X1 X2
1 1 5
2 3 7
3 6 4
4 5 3
5 8 3
> class(x2) # x2 は行列だと判明する
[1] "matrix"
> y <- c(4,3) # y がベクトルだと,
> x %*% y # データフレームとベクトルの掛け算はできないが,
以下にエラーx %*% y : 数値行列またはベクトルが要求されます
> x2 %*% y # 行列に直したものとベクトルの掛け算は当たり前だが,できる
[,1]
1 19
2 33
3 36
4 29
5 41
以上

No.02945 Re: R :数値行列のエラー  【mitsuhashi】 2007/03/07(Wed) 13:46

青木先生,ありがとうございました。無事プログラムが動きました。データフレーム,class は勉強不足で今回初めて知りました。非常に勉強になりました。

● 「統計学関連なんでもあり」の過去ログ--- 040 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る