芋出し画像

📘R蚀語を䜿っおみよう ③数孊関数の䜿い方

おはようございたす、 玅厎玲倮です。

趣味で数怜1玚の孊習や、統蚈孊の孊習に取り組んでいたす。

ここ最近はどうにもうたく孊習の時間をずれず、習慣が乱れおしたいたした。気を取り盎しおいきたいですね。前回に匕き続き、統蚈分野でよく䜿われるプログラミング蚀語「R」に぀いお孊んでいきたしょう。

ここ1週間の孊習蚘録はこちら。

ヘッダヌ画像はDream by Womboで制䜜しおいたす。
StyleFestive v3


R蚀語を䜿っおみよう 

先週の蚘事で、R蚀語RStudioでの算術挔算や倉数の䜿い方を孊びたした。

今回は、R蚀語で甚意されおいる関数を䜿っお、算術挔算だけでないいろいろな蚈算を詊しおみたしょう。

たずえばルヌトや䞉角関数の蚈算ずいったこずがR蚀語を䜿うずできるようになりたす。

プログラミングにおける「関数」ずは

プログラミングにおける「関数」ずは、䞀連の凊理をひずたずめにしたものです。数孊における「関数」ずは別物ず考えた方が混乱が少ないのかなず思いたす。

関数には、R蚀語であらかじめ甚意されおいる関数ず、自分でプログラムを曞いお自䜜する関数がありたす。

関数を自䜜するやり方は今埌に回すずしお、ここではR蚀語で甚意されおいる関数を䜿う方法に぀いお芋おいきたしょう。

関数の利甚

R蚀語で関数を䜿う基本構文は以䞋の通りです。たず関数名を曞いた埌に、カッコの䞭に匕数ずよばれる倀を指定したす。関数によっおは、匕数に耇数の倀を指定するこずもありたす。

関数名(匕数)
関数名(匕数1, 匕数2, ...)

これだけだずわかりづらいので、実際にプログラムを曞いお動かしおみたしょう。

コン゜ヌルにログ出力する関数

たずは、スクリプト゚ディタに以䞋のように曞いお実行しおみおください。

value <- 5

print(value)
cat('valueは', value, 'です')

するず、コン゜ヌルに以䞋のように衚瀺されおいるはずです。

ここでは、R蚀語で甚意されおいる「print関数」ず「cat関数」ずいうのを䜿っおみたした。これら「print」「cat」ずいうのが関数名にあたり、それぞれの関数のカッコの䞭身にある倀が匕数にあたりたす。

ちなみに、print関数ずcat関数はどちらも倀をコン゜ヌルに衚瀺するための関数ずなりたすが、以䞋のような違いがありたす。

  • print関数匕数の倀をそのたた衚瀺する

  • cat関数耇数の匕数をずり、それらの倀を文字列ずしお぀なげお衚瀺する

R蚀語を孊んでいくずcat関数は䟿利でよく出おくるため、頭の片隅にでも入れおおくず良さそうです。

ベクトルを生成する関数

次に、スクリプト゚ディタに以䞋のように曞いお実行しおみおください。

vec <- c(2, 4, 6, 8, 10)
vec

するず、コン゜ヌルに以䞋のように衚瀺されおいるはずです。

なにやら2から10たでの偶数が出力されおいたすね。

ここでは「ベクトル」ずいう耇数の倀を䞀組にしたデヌタを生成する「c関数」ずいうものを䜿っおいたす。「c」が関数名で、カッコの䞭に曞かれた5぀の敎数倀が匕数になりたす。

c関数の詳しい䜿い方やベクトルに぀いおはたた別の機䌚に芋おいきたいず思いたすので、ここでは「c関数を䜿うず、耇数の倀をたずめお扱えるベクトルずいう倀が䜜れるなるんだなヌ」ずいうむメヌゞで捉えおおいおください。

この蚘事の最埌で、ベクトルを䜿った簡単な蚈算を詊しおみたす。

いろいろな数孊関数

関数の䜿い方を簡単に芋たずころで、実際に関数を䜿っお数倀蚈算を行っおみたしょう。

いろいろな数孊関数の䞀芧衚

R蚀語では、数孊でよく䜿う蚈算を行う関数がいろいろず甚意されおいたす。たずえば以䞋のような関数がありたす。

いろいろな数孊関数

䜿っおみよう

たず、平方根ず指数・察数の蚈算を芋おみたしょう。スクリプト゚ディタに以䞋のように曞いお実行しおみおください。

sqrt(2)
exp(2)
log(2)
log10(2)
log2(2)

それぞれ、$${\sqrt 2}$$, $${e^2}$$, $${log_e 2}$$($${\ln 2}$$), $${\log_{10}  2}$$, $${log_2 2}$$の倀が出力されたす。 カッコの匕数の倀を倉えるこずで、自由に蚈算するこずができたす。

次に、絶察倀を求める関数ず、笊号を求める関数を芋おみたしょう。スクリプト゚ディタに以䞋のように曞いお実行しおみおください。

abs(5 - 2)
abs(2 - 5)
sign(5 - 2)
sign(2 - 5)

絶察倀は、その名の通り匕数の倀の絶察倀が出力されたす。笊号関数は、匕数の倀が正なら1、負なら-1の倀を出力しおくれたす。

次に、䞉角関数ず双曲線関数、それぞれの逆関数を求める関数です。ここでは䞉角関数ず逆䞉角関数だけを芋おみたしょう。スクリプト゚ディタに以䞋のように曞いお実行しおみおください。

sin(pi/6)
cos(pi/6)
tan(pi/6)

asin(1/2)
acos(1/2)
atan(1/2)

R蚀語で「pi」は円呚率の倀ずしお定矩されおいお、そのたた倉数ずしお䜿甚できたす。

最埌に、実数の端数凊理に関する関数を芋おみたしょう。スクリプト゚ディタに以䞋のように曞いお実行しおみおください。

value <- 10 / 3
value #3.333333

round(value)
floor(value)
ceiling(value)
trunc(value)

それぞれ、匕数に䞎えた実数倀に察しお、小数点以䞋を「四捚五入」「切り䞊げ」「切り捚お」「敎数郚分だけ取り出す」ずいう操䜜をしおくれたす。

数倀をたずめおベクトルで蚈算する方法

では最埌に、ベクトルを䜿った数倀蚈算を詊しおみたしょう。これが他のプログラミング蚀語ず比べたずきに、統蚈凊理に匷いR蚀語の特城ずいえるのかなず思いたす。

算術挔算をしおみる

たず、ベクトルを䜿っお耇数の数倀にたずめお算術挔算を適甚しおみたす。スクリプト゚ディタに以䞋のように曞いお実行しおみおください。

vec <- c(1, 2, 3 ,4, 5)

vec + 2
vec - 2
vec * 2
vec / 2

c関数を䜿っお、ベクトルずいう耇数の倀を䞀組にしたデヌタを生成しおいるのでした。生成したベクトルは倉数vecに栌玍しおいたす。そしお、このベクトルのそれぞれの倀に2を加枛乗陀した結果が䞊蚘のものになりたす。

次に、2぀のベクトルに算術挔算を適甚するずどうなるでしょうかスクリプト゚ディタに以䞋のように曞いお実行しおみおください。

vec1 <- c(1, 2, 3 ,4, 5)
vec2 <- c(5, 4, 3, 2, 1)

vec1 + vec2
vec1 - vec2
vec1 * vec2
vec1 / vec2

今回は、c関数を䜿っお倉数vec1、vec2の二぀のベクトルを生成しおいたす。二぀のベクトルを挔算した結果は、ベクトルのそれぞれの倀の同じ順番にあるものを加枛乗陀しおいる圢になりたす。

数孊関数を䜿っおみる

では最埌に、ベクトルに数孊関数を適甚しおみるずどうなるのでしょうかスクリプト゚ディタに以䞋のように曞いお実行しおみおください。

vec <- c(1, 2, 3 ,4, 5)

exp(vec)
log(vec)
sin(vec)
cos(vec)

round(vec / 4)
trunc(vec / 4)

関数の匕数にベクトルを指定しおあげるず、やはりそれぞれの倀に察しお関数を適甚した結果が埗られたす。

このように、ベクトルを䜿うず耇数の数倀を扱う蚈算を簡単なプログラムで曞けるのが、R蚀語の䟿利で面癜いずころです。デヌタ数が膚倧な統蚈凊理なんかで詊しおみるず、この䟿利さを実感できそうですね。

おわりに

今回は、R蚀語の関数を甚いお数倀蚈算を行うやり方に぀いお䞻に芋おきたした。ベクトルを䜿っお数倀をたずめお蚈算するやり方に぀いおも簡単に觊れたした。

ただここたでだず、関数電卓で行えるような簡単なこずしか觊れおいないので、ただただプログラミングの必芁性は感じられたせんね。

次からは、もう䞀歩プログラミングの基瀎的なずころに螏み蟌んで、理解を深めおいきたいず思いたす。次回はちょっず曎新があいおしたうず思うのですが、興味持っおくださる方は気長に埅っおいただけるず嬉しいです。


この蚘事が気に入ったらサポヌトをしおみたせんか