Learn to Live and Live to Learn

IT(たまにビジネス)に関する記事を読んで、考えて、使ってみたことをまとめる場。

Rの基本関数

JIN'S PAGEでRを勉強しているのですが
基本的な関数の理解(「Rでのデータの編集と演算」まで)は終わりました。
そこまででちょっとつまったところをまとめておきたいと思います。

1. Rにあるデータをファイルに書き出す「write」
2. 行列を指定した行でソートするための「sort.list」
3. 行列A×固有値==固有ベクトル×固有値はFALSEになる

1. Rにあるデータをファイルに書き出す「write」

write(t(rdata),"/Users/A_01/RW/OutData.txt",ncolumns=2)

rdataは2行5列の行列です。

> rdata
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    3    5    7    9
[2,]    2    4    6    8   10

2列=5行2列にしたいときは
第三引数にncolumns=2を設定します。
どういう引数が指定できるかはRのヘルプに載っています。

2. 行列を指定した行でソートするための「sort.list」
sort.list自体は与えた行を昇順に並べ変えた
列番号のベクトルを返します。

> sales2
  Cherry Apple Grape Banana Other
A     15    20    25     10    30
B     10    25    20     25    20
> sort.list(sales2[1,])
[1] 4 1 2 3 5

それを行列[,列番号のベクトル]とすることでソートできるのです。

> sales2[,sort.list(sales2[1,])]
  Banana Cherry Apple Grape Other
A     10     15    20    25    30
B     25     10    25    20    20

だから、同じことをこんな風にもできます。

> sort.num<-c(4,1,2,3,5)
> sort.num
[1] 4 1 2 3 5
> sales2[,sort.num]
  Banana Cherry Apple Grape Other
A     10     15    20    25    30
B     25     10    25    20    20

3. 行列A×固有値==固有ベクトル×固有値はFALSEになる
注意)理由は、調べときますという感じなのですが一応シェア。
Xは固有値、lamudaは固有ベクトルです。

> A
     [,1] [,2]
[1,]    1    1
[2,]    2    4
> lamuda=eigen(A)$values
> lamuda
[1] 4.5615528 0.4384472
> X=eigen(A)$vectors
> X
           [,1]       [,2]
[1,] -0.2703230 -0.8719282
[2,] -0.9627697  0.4896337

A%*%X[,2]は行列で、lamuda[2]*X[,2]はベクトルなので
lamuda[2]*X[,2]を行列に変換して比較してみました。
が、2行1列目の戻り値はFALSEでした。

> A%*%X[,2]==matrix(lamuda[2]*X[,2],2,1)
      [,1]
[1,]  TRUE
[2,] FALSE
> matrix(lamuda[2]*X[,2],2,1)
           [,1]
[1,] -0.3822945
[2,]  0.2146785
> A%*%X[,2]
           [,1]
[1,] -0.3822945
[2,]  0.2146785