def 小児科医():

かけだし小児科医が仕事の合間にプログラミングを勉強するブログです。

Rを触ってみる話①

 

なんか毎回英語だと更新頻度落ちそうなので定期的に日本語投稿も混ぜていく。

 

Pythonと出会って早9ヶ月。

ついに他言語も学ぶことを決めた。

 

最近自分の好奇心を抑えられずに、プログラミングに限らずありとあらゆるものに手を出している。

 

これは最近読み始めた本。

その第1章?最初の方で、あらゆるものは複雑系に塗れていて、全てを理解することは無理だよ。やろうとするとフラクタル的に沼にハマるよーって書いてあった。

 

というわけでフラクタルというかカオスというかそんな状況の私。

仕事でこれやっちゃうといけない気がするけどまぁ趣味なら良いでしょう。

 

 

RとRStudio

まずは

Rのダウンロードと

cran.ism.ac.jp

RStudioのインストール

posit.co

 

 

とりあえず基本的な演算子とか関数とかを眺める

':'演算子

2つの整数の間に含まれる全ての整数をベクトルで返す

> 100:150
 [1] 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
[30] 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150

こんなんpythonないよな?多分、、、

オブジェクトの作り方

'<-'という演算子でオブジェクトにデータを格納できる。矢印←って意味なんかな?

> dice<-1:6
> dice
[1] 1 2 3 4 5 6

 

で、ちょい便利だと思ったのはRStudioにenvironmentってのが表示されてて、そこに作ったオブジェクトが一覧になってること。

ls()関数でも確認できる

 

長さの異なるベクトルを計算させると短い方がループする

というかそもそも行列の計算じゃなくて要素ごとに計算してる感じ?すごいとっつきにくい、、、

> dice * 1:2
[1]  1  4  3  8  5 12

そしてループが中途半端に終わる(割り切れない)となんか怒られた。

> dice * 1:4
[1]  1  4  9 16  5 12
Warning message:
In dice * 1:4 :
  longer object length is not a multiple of shorter object length

 

と思ったらちゃんと直積を計算する方法があった。

%o%演算子で計算できた。

> dice %o% 1:2
     [,1] [,2]
[1,]    1    2
[2,]    2    4
[3,]    3    6
[4,]    4    8
[5,]    5   10
[6,]    6   12

関数

まずは普通の関数

sample(x, y)関数

xベクトルからy個数分の要素を返す。

> sample(dice, 2)
[1] 1 5

replace=TRUEとすれば(Trueだとダメぽい、、)値を取り出すたびに元に戻すようになる。

 

独自関数の作り方

function関数を使用

{}の中にコードを書く。

> my_function <- function(){
+ dice <- 1:6
+ select_dice <- sample(dice, 2, replace = TRUE)
+ sum(select_dice)
+ }
> my_function()
[1] 9

 

感想

pythonと劇的な違いはなさそう。なんか頑張ればできそうな気がする。まぁそもそもまずはpythonマスターしろよって話なんですが。