もっと早くRの基本操作について書くべきでした… と反省を込めて 色々と基本操作、便利操作を記載してみようと思います。
色々とサイトをめぐってみるとわかると思いますが、Rでは、日本でいうところの外積(2つのベクトルに直交するベクトルが求められるもの)を直接求める関数は、無いようです。(パッケージを入れると使えるが)
データを作ってみよう
当サイトでは、主に投資関係のデータを扱うことが多いので、それに関した操作を示してきております。
ただ、プログラミング初心者とか、そういった層には随分と不親切だなぁという事で、基本操作から書いていきます。 一部は、Rの導入関係の記事で示していますし、重複する点もあるかも。
Rは主にベクトルを扱います。 ベクトルってーと数学っぽくて嫌忌する方も居るかもしれません。ここでいうベクトルは、数字や文字の並び程度に考えてもらえれば良いと思います。
a <- c(1,2,3,4)
b = c(1:4)
> a
[1] 1 2 3 4
> b
[1] 1 2 3 4
> a+b
[1] 2 4 6 8
> a*b
[1] 1 4 9 16
左の変数(a,bのこと)に 1~4の数字が並んだベクトルを格納しています。ベクトルの作成にはc()を使います。各要素を「,」で区切ります。
<- や = を使うと その前の文字を変数として 右側にある何かを格納することが出来ます。
こういった操作を 「定義」とか「格納」とか呼びます。 単純に設定するとかって表現することも。
連番の場合は1:4のように 「:」でスタートと終わりを設定すれば表記できます。
+は各要素の足し算、*は各要素を掛け算してくれます。
文字列も入れられます。
c <- c("Hello","World")
> c
[1] "Hello" "World"
文字列の場合は ””で囲います。 違いについて見てましょう
> class(a)
[1] "numeric"
> class(b)
[1] "integer"
> class(c)
[1] "character"
R上ではデータは様々な属性を持っています。 属性はclass()で確認することが出来ます。
aは「数値」、bは「整数」、cは「文字」であることがわかりました。解析をする際には、こういった属性が重要になることがあります。が、とりあえず、文字か数値かその他の属性があるんだな~位に認識しておきましょう。
R基本の演算子
足し算と掛け算は、既に示しましたが、プログラミングでは、「演算子」と呼ばれる、すでに役割がふられた記号が存在します。 まずは計算に使うものから
演算子 | |
+ | 和 |
- | 差 |
* | 積 |
/ | 商 |
%/% | 整数商 |
%% | 剰余 |
^ | 乗 |
1+2
[1] 3
5-3
[1] 2
2*4
[1] 8
9/3
[1] 3
13%/%4 # 3 余り 1 の 3
[1] 3
13%%4 # 3 余り 1 の 1
[1] 1
2^10
[1] 1024
次に その他の、論理演算子等を見てみましょう 条件判定に用います。 正しければTRUE 間違っていればFALSEです。 TRUEやFALSEを論理値と呼びます。
演算子 | |
> | より大きい |
>= | 以上 |
< | より小さい |
<= | 以下 |
& または && | かつ and |
| または || | または or |
== | 等しい |
!= | 等しくない |
%in% | 含まれるか判定 |
> 1>2
[1] FALSE
> 2>2
[1] FALSE
> 2>=2
[1] TRUE
> 2<2
[1] FALSE
> 2<=2
[1] TRUE
> 2 <= 2 && 3 >2 # 両方正しい
[1] TRUE
> 2 <= 2 & 3 >4 # 片方違う
[1] FALSE
> 2 <= 2 | 3 >4 # どっちか正しければOK
[1] TRUE
> 1 == 2
[1] FALSE
> 1 != 2
[1] TRUE
数値が正しいか否かを判断しましたが、文字列にも使えます。
> a <- "hello"
> b <- "world"
> c <- c("hello","world") # 文字列をベクトルとして扱う
> d <- c("good", "nice", "world")
> a == c
[1] TRUE FALSE
> c == b
[1] FALSE TRUE
> c != b
[1] TRUE FALSE
> c %in% d
[1] FALSE TRUE # cの"hello"は含まれないけど、"world"は含まれる
> d %in% c
[1] FALSE FALSE TRUE
> a %in% d
[1] FALSE
> d %in% b
[1] FALSE FALSE TRUE
%in%は、データを抽出した際に、同じものがあるかどうかを判定したりするときに重宝します。
行列
行列はベクトルの拡張概念と解釈しましょう。 複数のベクトルを並べているとも言えますし、色々なデータの表とも考えることが出来るでしょう。試しに作ってみます。
e <- matrix(1:12, nrow = 3 , ncol = 4)
> e
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
> class(e)
[1] "matrix" "array"
matrixは英語で行列のこと。Rではmatrix(データ、nrow=行の数,ncol=列の数)と指定することが出来ます。
eで呼び出した際、3行4列の行列が呼び出せていますね。
また、各行、各列の端に[,1] [,2]や[3,]のような表記があります。これは[行番号,列番号]を示しています。
[]で”,”を付けずに呼び出すと、要素の順番に呼び出されます。以下の例で意味を理解してください。 e <- matrix(1:12, nrow = 3 , ncol = 4)
> e
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
> class(e)
[1] "matrix" "array"
> e[1] # eの一つ目の要素を呼び出す
[1] 1
> e[1,] # eの1行目の要素を呼び出す
[1] 1 4 7 10
> e[,1] # eの1列目の要素を呼び出す
[1] 1 2 3
> e[12] # eの12番目の要素を呼び出す
[1] 12
> e[3,4] # eの3行4列目の要素を呼び出す
[1] 12
> e[c(1,3),] # eの1行目、3行目を呼び出す。
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 3 6 9 12
>e[c(1,3),c(2,4)] # eの1行目、3行目の 2列目、4列目を呼び出す。
[,1] [,2]
[1,] 4 10
[2,] 6 12
行列には、名前を付けることが出来ます。また、名前がついている場合、名前で呼び出すことも出来ます。
それぞれ命名するための関数は、colnames()と、rownames()です。
正確にはeの行名(最初は空の)を呼び出して、<-を使ってc(~)のベクトルを格納しています。
> colnames(e) <- c("col1","col2","col3","col4")
> rownames(e) <- c("row1","row2","row3")
> e
col1 col2 col3 col4
row1 1 4 7 10
row2 2 5 8 11
row3 3 6 9 12
> e[,"col2"]
row1 row2 row3
4 5 6
> e["row2",]
col1 col2 col3 col4
2 5 8 11
> e["row3","col3"]
[1] 9
行列の演算は、Rだとちょっと違うところがあります。
式 | |
+ | 各要素との和。または行列同士の和 |
- | 各要素に-1をかける。または、各要素との差、または、行列同士の差。 |
* | 各要素同士の積を取る。 |
%*% | 行列同士の積 ベクトル同士の場合は内積を求める |
> a <- matrix(1:9,nrow = 3, ncol = 3) # 3行3列
> b <- matrix(rep(1:3,3),nrow = 3, ncol = 3) # rep(A,B)はAをB回繰り返す
> a
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
> 1+a
[,1] [,2] [,3]
[1,] 2 5 8
[2,] 3 6 9
[3,] 4 7 10
> b
[,1] [,2] [,3]
[1,] 1 1 1
[2,] 2 2 2
[3,] 3 3 3
> a+b
[,1] [,2] [,3]
[1,] 2 5 8
[2,] 4 7 10
[3,] 6 9 12
> a-b
[,1] [,2] [,3]
[1,] 0 3 6
[2,] 0 3 6
[3,] 0 3 6
> -b
[,1] [,2] [,3]
[1,] -1 -1 -1
[2,] -2 -2 -2
[3,] -3 -3 -3
> a*b # 各要素の積
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 4 10 16
[3,] 9 18 27
> a%*%b # 行列の積
[,1] [,2] [,3]
[1,] 30 30 30
[2,] 36 36 36
[3,] 42 42 42
> b*a # 各要素の積なので、並びが変わっても計算結果が同じ
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 4 10 16
[3,] 9 18 27
> b%*%a # 行列の積なので、並びが変わると結果が変わる。
[,1] [,2] [,3]
[1,] 6 15 24
[2,] 12 30 48
[3,] 18 45 72
> c(1,0)%*%c(0,1) # 直交するベクトルの内積は0です。
[,1]
[1,] 0
%*%が行列の積の演算子となっていて、普通の*を使うと各要素同士を計算します。
したがって、*の場合、m行n列のm同士、n同士が一致していないと計算できません(つまり、同じサイズの行列)。一方、%*%は行列の積なので、左の行と、右の列の数が一致していれば計算できます。
例は3行3列なので、どちらでも計算が出来ますが、行列の積の場合、計算結果が異なります(左の1行目の各要素と、右の1列目の各要素の積を、合計するため)。
次回は行列自体の演算について、見ていこうと思います。
おすすめFXアイテム
過去検証や分析はMT4かFT4、Trading viewがおすすめです。
無料が良い人はMT4で、MT4を使わせてくれる口座を使用すると良いです。おすすめはFXTF
チャート分析に毎月課金してもいいよって人はTrading viewがおすすめです。無料もあります