もっと早く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

ガチで過去検証をやりたい人はFT4、

チャート分析に毎月課金してもいいよって人はTrading viewがおすすめです。無料もあります

Twitterでフォローしよう

おすすめの記事