2016年12月28日水曜日

外部とのデータのやりとり

 R にデータを取り込んだり、その逆をする方法です。いろいろなケースがありますが、代表的で使いやすい、csvファイルによる方法と、クリップボードを経由する方法の2つを紹介します。


csv は comma-separated values の略で、コンマ(,)で区切られた値という意味です。
データフレームをcsvファイルにしたり、その逆をします。
> d
  sex  w   h
1   F 45 150
2   F 48 151
3   M 55 160
4   M 54 163
5   F 50 155
> write.csv(d,"data.csv",row.names=FALSE)
データフレーム d を "data.csv" という名前で書き出しました。
書き出されたファイルは単なるテキストファイルですが、拡張子はcsvにしておくのがよいでしょう。
書き出されたファイルは以下のようになっています。
"sex","w","h"
"F",45,150
"F",48,151
"M",55,160
"M",54,163
"F",50,155


書き出したcsv ファイルを、変数 e に読み込みます。
> e=read.csv("data.csv")
> e
  sex  w   h
1   F 45 150
2   F 48 151
3   M 55 160
4   M 54 163
5   F 50 155



つぎに、クリップボード経由でやり取りする方法を述べます。

クリップボードはコンピュータの基本機能です。コピーするとクリップボードに保管されます。貼り付けるとクリップボードの内容が貼り付きます。

想定しているのは、excelで作業しているデータを取り込むことです。

 excelで、必要な範囲を選択し、コピーします。excelでのコピーはCtrlキーとCキーを一緒に押すなどの方法があります。
そのあと、Rで
> x = read.table("clipboard",header=TRUE)
1行目が項目なので、header=TRUE を付けます。
> x
   a  b
1 34 66
2 12 27

逆に、変数xの内容をクリップボードにコピーするには
write.table(x , "clipboard" , sep="\t" , row.names = FALSE )
となります。このようにコピーして、excelで貼り付ければOKです。

sepは区切り文字の指定です。separator の意味です。csvファイルのセパレータはコンマでしたが、excelでのコピー・貼り付けではセパレータは「タブ」といわれる一種の文字です。"\t"はこの「タブ」
といわれる文字を表します。

row.namesのデフォルトはTRUEで、行名を勝手につけてしまうので、それを抑制しました。

2016年12月26日月曜日

データフレーム

> d
  sex  w   h
1   F 45 150
2   F 48 151
3   M 55 160
4   M 54 163
5   F 50 155
上の変数 d は、5人の人の、性別、体重、身長のデータです。

このような形のデータをデータフレームといい、R ではよく使われます。

データフレームは次のように作ります。スクリプトファイルに書いて、実行しました。
d=data.frame( sex=c("F","F","M","M","F") ,
              w=c(45,48,55,54,50),
              h=c(150,151,160,163,155)
  ) 

最初のデータフレームの出力例で、テータの横の並びを「行」といい、上から第1行、第2行、・・・、縦の並びを「列」といい、左から順に第1列、第2列、・・・といいます。

data.frameはデータフレームを作る命令です。
その中は各列ごとに、 列名 = ベクトル の繰り返しです。

データフレームから列を取り出すには、
> d$w
[1] 45 48 55 54 50
のように、データフレーム名$列名 と指定します。

行番号、列番号で指定することもできます。
1番目の人の2番目のデータ(体重)は次のように指定します。
> d[1,2]
[1] 45
行番号、列番号の順に指定していることに注意してください。この指定方法は大変柔軟性があります。
いくつか例を挙げるので検討してみてください。
①行番号のみ指定して、列番号を省略すると、列番号はすべて選ばれます。
> d[1,]
  sex  w   h
1   F 45 150

②行番号のみの指定ですが、ベクトルで指定しました。
> d[c(2,4),]
  sex  w   h
2   F 48 151
4   M 54 163

③列番号のみの指定です。1列目は性別で、文字列M,F で指定しました。
 このような場合、データフレーム内では文字列としてではなく、
 因子(factor)として扱われるので、Lebels: などという行が付加されます。
> d[,1]
[1] F F M M F
Levels: F M

④行番号を:(コロン)で指定してみました。2~4番の人の身長です。
> d[2:4,3]
[1] 151 160 163


データフレームの扱い例です。
> summary(d)
 sex         w              h        
 F:3   Min.   :45.0   Min.   :150.0  
 M:2   1st Qu.:48.0   1st Qu.:151.0  
       Median :50.0   Median :155.0  
       Mean   :50.4   Mean   :155.8  
       3rd Qu.:54.0   3rd Qu.:160.0  
       Max.   :55.0   Max.   :163.0  
> plot(d)

summary での出力、sex欄は F が3個、M が2個あることをいっています。 w と hの出力については、以前説明ものと同じです。

plot の出力は以下のようになります。


2データずつの組み合わせで、 散布図を作っています。
wとhの散布図は以前説明したものと同じですが、縦軸と横軸を取り替えた2つがあることを確認してください。
sex(因子) との組み合わせは、Fが1、Mが2 として散布図が描かれています。
因子は1、2、3、・・・と変換されます。特に指定がなければアルファベット順です。

2変量の扱い plot cor

10人の生徒がいるとします。この10人の国語の点数は順に 46 44 45 52 32 52 36 40 43 54 点、数学の点数は順に 33 38 68 48 38 37 52 29 60 67 です。
それぞれ変数x,yに格納します。

> x=c(46,44,45,52,32,52,36,40,43,54)
> y=c(33,38,68,48,38,37,52,29,60,67)
散布図を描くには plot 関数を使います。
> plot(x,y)


国語ができる人は数学もできるという傾向があるでしょうか。

このような2変量の関係を相関といいます。相関を数値で調べるには相関係数を計算するのが一般的です。相関係数を計算する関数は cor です。相関係数は英語では Correlation coefficient といいます。
> cor(x,y)
[1] 0.2722588

相関係数の計算方法を紹介します。

まず、 xとyの共分散sxyとは、 x と y の偏差の積の平均です。言い換えると、「各人の国語の点数から国語の平均を引いたもの(国語の偏差)」と「各人の数学の点数から数学の平均を引いたもの(数学の偏差)」の積の平均です。 なお、共分散を求めるには、分散を求める関数と同じ var を用います。
> var(x,y)
[1] 27.55556

x と y の相関係数 r とは x と y の共分散 sxy を、x と y の標準偏差の積で割ったものです。式でいえば、sxy/(sx・sy) です。ただし、sx、syはx、yの標準偏差です。

> var(x,y)/(sd(x)*sd(y))
[1] 0.2722588
相関係数はー1以上1以下の値をとります。1に近いときは正の相関、-1に近いときは負の相関があるといい、1やー1に近いときは強い相関、0に近いときは弱い相関あるいは相関がないといいます。 この例ではあまり相関はなさそうです。

相関係数の計算で、分母、分子ともに平均をとっているので、どちらも平均の代わりに合計にしても同じになります。
分子は、偏差の積の総和、分母は偏差の平方の総和のルートの積です。
次のようになります。
> hx=x-mean(x)
> hy=y-mean(y)
> Sxy=sum(hx*hy)
> Sx=sqrt(sum(hx^2))
> Sy=sqrt(sum(hy^2))
> Sxy/(Sx*Sy)
[1] 0.2722588
hx、hyは偏差です。
Sxyは偏差の積の総和です。
Sx、Syは偏差平方の和のルートです。
最後の値が相関係数です。

2016年12月22日木曜日

四分位数と箱ひげ図 summary boxplot

ざっくりいうと、四分位数はデータを小さい順に並べて4等分し、区切りの数を小さい方から第1四分位数、第2四分位数、第3四分位数といいます。第2四分位数は中央値ともいいます。
厳密な定義は種々あるようですが、教科書では次のようになっていました。

①中央値・・・データを小さい順に並べたときに、中央に来る値。偶数個の場合は中央2個の平均
②第1四分位数・・・下半分の中央値。全体のデータの個数が奇数の場合は中央の値は上半分にも下半分にも含まれない。
③第2四分位数・・・中央値
④第3四分位数・・・略

Rの四分位数の定義はこれとは若干違うようです。
> x=rnorm(100)
> summary(x)
    Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
-2.43200 -0.63320  0.05018  0.02139  0.63870  3.19800 
> boxplot(x)


 
summary で最大値、最小値、四分位数、平均がわかります。

boxplot で箱ひげ図を書いてくれます。箱ひげ図の中に小さな〇が見えますが、これは外れ値といって、第1四分位数ー(第3四分位数ー第1四分位数)*1.5 より小さいものと、第3四分位数+(第3四分位数ー第1四分位数)*1.5 より大きいものです。

乱数の生成2 runif rnorm

先に述べた乱数は離散的でした。連続数の乱数を発生させることもできます。ここでは、2つ紹介します。
一様乱数はrunifで発生させます。0と1の間の一様乱数を発生させます。一様乱数はヒストグラムを見てもらえばわかりますが、どこの値も同じ確率で出現するものです。正確に言えば、0と1の間のどの区間をとってもその区間に属する確率がその区間の長さになるということです。
> runif(10)
 [1] 0.74192181 0.84109459 0.03790601 0.57752632 0.74297037
 [6] 0.14437520 0.53421387 0.73867798 0.03281839 0.21860819
> hist(runif(1000))
runif の引数は発生させる乱数の個数です。10個の乱数を発生させました。
続いて、1000個の一様乱数の分布状態です。
 
正規分布に従う乱数を発生させるにはrnormを使います。引数はやはり発生させる乱数の個数で、平均0、分散1の正規分布に従います。
 
> rnorm(10)
 [1]  0.7598543  0.8352244  2.1416279 -1.1533345  0.5850839
 [6]  0.9011274 -0.6544796  0.2424756 -1.2737129 -0.3236183
> hist(rnorm(1000))



一様分布と正規分布の分布状況の違いを確認してください。試験の点数や身長などは正規分布に近い分布をします。

問題1 runif(1000)について、平均と分散を求めてください。

問題2 rnom(1000)について、平均と分散を求めてください。

問題3 一様乱数2個の和の分布を見てください。さいころ2個の和の分布と似ていますか

一様分布と正規分布はuniform distribution と normal distribution といいます。

分散と標準偏差 var sd

次のサンプルデータを使います。
> x=sample(1:6,10,T)
> x
 [1] 6 4 5 4 4 4 5 3 2 5
平均を出してみます。
> sum(x)/length(x)
[1] 4.2
> mean(x)
[1] 4.2
各値から平均を引いたものを偏差といいます。次のyです。 > y=x-mean(x) > y [1] 1.8 -0.2 0.8 -0.2 -0.2 -0.2 0.8 -1.2 -2.2 0.8
> y=x-mean(x)
> y
 [1]  1.8 -0.2  0.8 -0.2 -0.2 -0.2  0.8 -1.2 -2.2  0.8
データが平均からどれくらい離れているかを数量化したいとします。偏差を合計すると当然0になります。
> sum(y)
[1] -1.776357e-15
あれ、0になりませんね。
この表示は、-1.776357かける10の-15乗であるといっています。これは0に大変近い数です。yの値はコンピュータの中では正確に表現できないので、合計すると誤差が積算してしまうのです。こういう現象があることは知っておきましょう。実際には0です。 これは平均より大きければプラス、小さければマイナスとなり、合計すると相殺してしまうからです。
これではどれくらい離れているかわかりません。 なので、これらをすべて2乗して正の数にしてから合計します。
> sum(y^2)
[1] 11.6
一つのデータあたりにするために平均します。
> mean(y^2)
[1] 1.16
この値を分散といいます。要約していえば、分散とは 偏差平方の平均 です。

分散を求める関数は var です。
> var(x)
[1] 1.288889
あれ、値が違いますね。
実はRの分散はデータの数をnとすると、(n-1)で割っているのです。今の例ではデータの数は10個ですから偏差平方和を9で割っているということです。
> sum(y^2)/9
[1] 1.288889
同じになりましたね。

平均といいながら(n-1)で割るとは何事かと、思うでしょう。実はexcelでの分散varも同じことをやっています。その理由はここでは述べられません。これから、勉強していけば、いつかわかります。大学へ行ってからかな?

分散は、散らばり具合を表す数として、非常に重要なものです。

分散は偏差平方の平均でした。従ってこれをルートしたものが偏差の代表と考えてよいでしょう。これを標準偏差といいます。
標準偏差を求める関数は sd です。standard deviation の略です。
> sd(x)
[1] 1.135292
> sqrt(var(x))
[1] 1.135292
nでわるか、(n-1)で割るかという問題はsdにもあります。
なお、高校で分散・標準偏差の計算をしろと言われたら、nで割ってください。

問題1 データが 1,2,3,4,5,6 の時の分散、標準偏差を求めてください。nでわったときと(n-1)で割ったときの両方の値を出してください。

問題2 さいころを1万回振るシュミレーションを行い、分散を求めてください。var を使ってよいです。

実は、問題1のnで割ったほうの分散が、サイコロを振ったときの分散の理論値になります。問題2と一致していますか?

関数について

sqrtはルートを計算する関数です。
> sqrt(5)
[1] 2.236068
( )の中の5を引数といいます。2.236068が返る値です。

sample関数の使い方は次のようになっています。?sampleで調べました。

    sample(x, size, replace = FALSE, prob = NULL)

引数は、x,size,replace,prob です。それぞれの引数には、具体的な値やベクトルが入ります。

x と size は 省略できません。

それに対して、replace と prob は省略できます。省略したとき、replaceはFALSE、probはNULLとなります。=の後の値は省略時のデフォルト値です。


sample関数を使って、関数の利用の仕方を説明しましょう。
①
> sample(1:5,10,T)
 [1] 4 1 1 2 4 4 5 4 2 4

②
> sample(size=5,x=1:6)
[1] 6 2 3 4 5

③
> sample(size=15,x=1:6,T)
 [1] 4 6 6 2 3 2 5 5 1 2 1 2 2 3 4

④
> sample(x=1:6,10,rep=T)
 [1] 5 1 1 6 1 3 2 5 2 3
①のように、単純に引数を与えると、順にx,size,replaceの値として処理されます。
②のように変数名も指定すると、引数の順序を変えてもOKです。
③のように、1・2番目は変数名を指定し、変数名を省略した3番目は順序通り3番目の値とすることも可能ですが、あまりお薦めできません。
④変数名は特定できるところまで省略可能です。この関数の場合rから始まる引数はreplaceしかないのでr=TでもOKです。

なお、引数 prob は、各値の出現の確率を変えるときに使います。たとえば、prob=c(3,1,2)とすると、出現の割合が 3:1:2 になるということです。

問題 関数 sqrt と hist について、?で調べてみてください。

sqrt の使い方は単純です。
それに対して、hist の方は、大変複雑です。しかし、だいたいの引数は省略可能なので、驚かなくてよいです。
実際に使うようになると、これらの引数が必要になることを身をもって知ることになりますが、それは先のこと。

乱数の生成 sample table hist replicate

乱数を発生させて、現実をシミュレーションしてみることは大変有益です。
> sample(c("A","B","C"),10,rep=T)
 [1] "B" "A" "A" "A" "A" "A" "C" "B" "B" "B"
?sampleで調べると、次のように使うと出てきます。

sample(x, size, replace = FALSE, prob = NULL)

xの成分が、でたらめにsize個並んだベクトルが返ります。
replaceはxの成分を繰り返し使うかどうかの指定で、省略するとFALSEすなわち、繰り返しなしとなりますから、sizeはlength(x)以下である必要があります。上の例では、rep=Tとしてあります。繰り返しを許すので、個数はいくつでもよくなります。replaceはrepと省略しました。誤解のない範囲で省略できますが、この辺のことはまた後日。 

> x=sample(1:6,100,rep=T)
> x
  [1] 6 2 2 4 6 1 3 4 2 1 4 1 2 2 5 4 2 3 2 3 6 6 5 4 3 3 1
 [28] 3 5 5 4 2 2 6 2 6 4 2 5 4 1 6 2 4 2 4 3 1 2 3 3 5 4 3
 [55] 6 6 1 3 1 3 5 1 3 6 5 5 5 4 1 5 3 3 5 5 3 5 6 1 3 4 6
 [82] 3 6 1 4 1 1 6 6 5 4 3 4 2 1 1 1 4 6 4
さいころを100回振ることをシミュレーションしました。

> table(x)
x
 1  2  3  4  5  6 
17 15 19 18 15 16 
それぞれの目の出た回数です。

> hist(x)

ヒストグラムです。階級はRが自動調整しますが、今回はその自動調整が裏目に出ています。感覚的にとらえるにはグラフを描かせることが有効です。

> mean(x)
[1] 3.47
平均の理論値は3.5です。

さいころ2個の目の和の分布です。
> y=sample(1:6,100,rep=T)+sample(1:6,100,rep=T)
> table(y)
y
 2  3  4  5  6  7  8  9 10 11 12 
 3  9 10  7 11 23  9 13  7  4  4 
> hist(y)
> mean(y)
[1] 6.86


さいころを100回振って平均を出すということを、何回も繰り返してみます。
> mean(sample(1:6,100,rep=T))
[1] 3.66
> replicate(10,mean(sample(1:6,100,rep=T)))
 [1] 3.46 3.19 3.17 3.58 3.71 3.44 3.39 3.41 3.48 3.61
> d=replicate(1000,mean(sample(1:6,100,rep=T)))
> hist(d)
最初のは、100回サイコロを振って平均を出すということを1行で書いたものです。
次は、それを10回繰り返しました。replicate(回数,命令)で命令を回数繰り返します。
その次は、繰り返しを1000回にして、その結果を変数dに代入しました。 最後にヒストグラムを描きました。

おおかた平均は3.5近辺になりますが、3以下から4まで、分布していることがわかります。ちょうど3.5にはならないのです。これが現実というものです。100回振ってもこれだけ幅があるのです。

問題1 コインを投げることをシミュレーションします。コインを100回投げ、表は"H"、裏は"T"として、結果を文字列ベクトル s としなさい。表裏はHead Tail といいます。

問題2 表が裏の2倍出やすいコインをシミュレーションするにはどうしますか?

問題3 普通のコインを5枚投げて、表の出る回数を数えてください。
  (文字列ベクトルに対して=="H"でHかどうかがわかります。sumで総和をとります。)

問題4 問題3を1000回繰り返し、5枚投げたときの表の回数の分布を調べてください。

データ型 character complex numeric logical

データ型には、数値を表すnumeric、論理値を表すlogical、文字列を表すcharacter があります。
文字列は " ダブルコーテーションマーク か ' シングルコーテーションマークでくくります。 
> s="ようこそRへ"
> s
[1] "ようこそRへ"
> s=c(s,"統計の世界へ")
> s
[1] "ようこそRへ"  "統計の世界へ"
Rにおける基本のデータに型は、文字列、複素数値、実数値、論理値があり、それぞれ、character、complex、numeric、logicalと呼びます。(複素数との対比のために実数値といいましたが、今後は数値と表現します。また、このブログでは複素数は扱いません。)変数や定数がどの型であるかを知るには、classを用います。
> s="ようこそRへ"
> class(s)
[1] "character"
> class(5)
[1] "numeric"
> class(TRUE)
[1] "logical"
> a=c(4,"おはよう")
> class(a)
[1] "character"
> a
[1] "4"        "おはよう"
下から5行目のaは数値と文字列を成分に持つベクトルを作ろうとしたところです。数値4が文字列型に変換されているのがわかります。
ベクトルの中に型が混在すると、先ほどの並びの順の最も左側の型になります。たとえばnumericとlogical が混在したらnumericになります。そのとき、TRUEは1にFALSEは0となります。
> T
[1] TRUE
> 3+T
[1] 4
数値と論理値が混在した計算でも、数値として計算され、TRUEが1として扱われていることがわかります。
sum 関数でもTRUEが1として扱われることは、先に見ました。

問題 文字列、数値、論理値を成分とするベクトルを作り、表示するとどうなるか、classはどうなるか、調べなさい。

2016年12月21日水曜日

調べる

Rにはいろいろと調べる方法が用意されています。
> ls()
[1] "i"    "p"    "x"    "xm"   "xpts" "xx"   "y"   

> ?mean

> example(mean)

ls()で、現在自分で使っている変数の一覧が出せます。
?mean はmean という関数を調べています。ブラウザが開きますが、説明は英語です。これが理解できるようになるにはしばらくかかるでしょう。help(mean)とやっても同じです。
example はサンプルコードを実行します。関数の使い方を知るなど、便利です。
メインメニューから Help - Manual - An Introduction to R はお薦めです。
Help - CRAN home page はRをダウンロードしたサイトですが、左側サイドメニューの Manuals へいくといろいろなマニュアルがあります。お薦めのAn Introduction to R もPDFだけでなく、ブラウザで見たりできます。
あとはググりましょう。 「r  演算子」などと検索します。日本語で説明してくれているのがうれしい。い。

スクリプト・コメント

R に与える命令は、別のファイルにすることができます。これをスクリプトファイルといいます。
スクリプトファイルを作るには、メインメニューから File - New Script とします。するとコンソールとは別にスクリプトを編集するウインドウが開きます。コンソールを選んでいるときと、ファイルエディタを選んでいる時ではメニューが変わることを確認しておきましょう。 
x=c(54,66,93,12,40)
print(length(x))
print(mean(x))
エディタでこのようなスクリプトを書いたとしましょう。これを、実行するには、 コンソールでなくエディタが選択されている状態で、 Edit - Run All とします。結果はコンソールに表示されます。

> x=c(54,66,93,12,40)
> print(length(x))
[1] 5
> print(mean(x))
[1] 53
エディタから実行する場合には、表示はprint を使って、明示的に表示することを指示します。 スクリプト中に覚え書きを書きたいことはよくあります。長いスクリプトを書いて、後で見返すと、何のことかわからないことはよくあるので、説明を書いておくことは良い習慣です。この覚え書きをコメントといいます。コメントは#の後に書きます。次のように。
# 初めてのスクリプト
# 2016-12-21
# 中高生のためのR入門

x=c(54,66,93,12,40) #データ
print(length(x))    #データの個数
print(mean(x))      #データの平均

スクリプトの一部だけを実行することもできます。
実行したい行にカーソルを置いて、Edit - Run line or selection とやるかまたはコントロールキーを押しながらrを押します。すると、その行が実行されます。
範囲選択して同様に行うと、選択範囲が実行されます。
なんて、便利なんでしょう。
作ったファイルを保存するには、File - Save または、File - Save as です。

論理値

> 5>3
[1] TRUE
> 5==3
[1] FALSE
比較をした結果は論理値となります。5>3 は5が3より大きいといっています。これは正しいので真の値をとります。真の値は TRUE です。Rでは大文字・小文字は厳密に区別されるので、注意してください。偽は FALSE です。
 5==3 は5と3が等しいといっています。これは偽なので、FALSE となります。= は代入、== は比較です。厳密に区別してください。
 以上、以下は >=  と <= を使います。異なるは != です。

> x=c(3,7,2)
> x>4
[1] FALSE  TRUE FALSE
ベクトルに適用しました。

> x=c(3,5,6,3,3,8,8)
> sum(x==3)
[1] 3
> sum(x==8)
[1] 2
論理値に数値演算を適用すると、TRUEは 1、FALSEは 0 として扱われます。ベクトルxのうちの3の個数と8の個数を調べました。

> x=c(3,5,6,3,3,8,8)
> y=(x>5)
> y
[1] FALSE FALSE  TRUE FALSE FALSE  TRUE  TRUE
> y[1]=T
> y
[1]  TRUE FALSE  TRUE FALSE FALSE  TRUE  TRUE
論理値を変数yに代入しました。
 y[1]の値をFALSE から TRUE に変更しました。TRUE は T と省略できます。 FALSE は F です。

> x
[1] 3 5 6 3 3 8 8
> x[c(T,F,T,T,T,F,F)]
[1] 3 6 3 3
ベクトルの添え字([ ]の中)に論理値を指定すると、TRUE のところだけが取り出されます。
この原理を使って、x のうちの 5 より大きいものを取り出すには
> x[x>5]
[1] 6 8 8
とやります。

問題 ベクトル x のうちの 5以上のものの個数と、その合計を求めてください。

変数・ベクトル

> x=1+2
 
> x*5
[1] 15
1行目、1+2を計算して、その結果を変数 x に代入しています。

このように = が使われたとき、単に数学的に等しいという意味でなく、代入という動作をします。
なお、Rにおいては、代入は <- を使うことが推奨されています。

x の値が3なので、3×5=15が表示されています。

> x=c(4,7,-1) 
 
> x
[1]  4  7 -1
c はベクトルを作る関数です。つなげるという意味のconcatenateの頭文字です。

ベクトル(4,7,-1)を作り、変数 x に代入し、次の行で表示しました。

なお、変数 x は先ほどと同じ名前の変数です。この場合、以前の記憶は消えています。

ベクトルの意味がわからなくても問題ありません。いくつかの数を一グループとして考えるだけです。 逆に、高校でベクトルを学んだ人は、あまりそれにとらわれない方がよいでしょう。高校の数学ではせいぜい3次元どまりですが、Rでは100次元とか普通です。

R において、ベクトルは重要です。ベクトルを理解し、自由自在に使えるようになることはR使いへの第一歩です。

> x*3
[1] 12 21 -3 
 
> y=c(3,0,2) 
 
> x+y
[1] 7 7 1
3を掛けると、すべての成分に3を掛けます。

同じ長さのベクトルを足すと、各成分ごと足されます。

長さのちがうベクトルとの演算では、短い方が繰り返し使われます。確認しておいてください。

> length(x)
[1] 3 
 
> sum(x)
[1] 10 
 
> max(x)
[1] 7 
 
> mean(x)
[1] 3.333333
上から順に、長さ(次元)、合計、最大、平均です。

> 1:5
[1] 1 2 3 4 5
> sqrt(1:5)
[1] 1.000000 1.414214 1.732051 2.000000 2.236068
大変便利な演算子に :(コロン) があります。 1:5 で1から5までの数からなるベクトルを作ります。

 sqrtはルートです。
通常は sqrt(2) などのように使うのですが、ベクトルを引数に渡すと、各値のルートからなるベクトルを返します。

> 1:3+5
[1] 6 7 8 
 
> 1:3*3
[1] 3 6 9 
 
> 1:3^2
[1] 1 2 3 4 5 6 7 8 9
:(コロン)の優先順位は、+-*/より高くて、^より低いです。 疑問が起きたら確認しましょう。

> x=c(3,5,7,8,0) 
 
> x[1]
[1] 3 
 
> x[2:4]
[1] 5 7 8 
 
> x[-(2:4)]
[1] 3 0 
 
> c(x,12,16)
[1]  3  5  7  8  0 12 16
ベクトルの各要素へのアクセスです。x[1]で1番目の成分を表します。番号は1から始まります。ほかのプログラミング言語では0から始まることが多いのですが、R では1から始まります。

 x[2:4]は2,3,4番目の成分を表します。先ほど出てきた:(コロン)です。

 x[-(2:4)]のようにカギ括弧の中に負の数を指定すると、その番号を除いたベクトルを返します。負の数と正の数の混在は許されていません。

 c はベクトルの結合です。こんな風にも使えます。

 x[1]=100のように代入することもできます。確認してみてください。

問題1 1+2+3+・・・+100 

問題2 5+7+9+・・・+99 (5から99までの奇数の和)

問題3 2+4+8+・・・+2^10 (初項2、公比2の等比数列の第10項までの和)


計算機として使う

 使ってみましょう。まずは、計算機として使います。コンソール画面では左端の>マークに続いて命令を与えます。
> 1+2*3
[1] 7
1+2*3と、押した後、ENTERキーを押しました。

 命令を完了してRに実行させるにはENTERキーを押します。

 1+2×3の計算をさせました。加減乗除にはそれぞれ、+-*/の記号を使います。かけ算は*(アスタリスク)、割り算は/(スラッシュ)、excelなどでも同じ記号を使うので、ご存知でしょう。累乗もexcelと同じで^を使います。乗除優先になっていることを確認してください。優先順位を変更するには()を使います。何重に使ってもよいです。コンソール画面をクリアするにはEdit-Clear Console とします。

 いくつかのサンプルをあげます。
> 3*2^3
[1] 24
 
> ((1+2)*3-4)/5
[1] 1 
 
> 2^(1/2)
[1] 1.414214
本日はここまで

2016年12月19日月曜日

Rの入手

 Rは統計処理をするソフトです。無料です。素晴らしい機能を持っています。Rを使えるようになるには統計の勉強が不可欠です。Rを使いながら統計を理解するといってもいいかもしれません。中高生のうちに使えるようになると、一生の財産になるでしょう。

  Rを利用するにはいろいろな方法があります。私は、RをRStudioというソフトの下で動かしています。それ以外に、IDEONEというサイトでは、WEB経由でRを動かせますが、グラフィックは出ないようです。R-FiddleでもやはりWEB経由でRを動かすことができて、グラフィックも使えます。

  ここでは標準的なRのインストール方法を紹介します。

  googleでrと検索すると「R: The R Project for Statistical Computing」がヒットします。参考までにアドレスはhttps://www.r-project.org/です。ここからDownloadのCRANをクリックし、下のほうに日本のサイトが出てきますからそのどれかをクリックします。windowsで使う場合は、Download R for Windowsをクリックし、install R for the first timeをクリックします。Download R 3.3.2 for Windows をクリックしダウンロードして実行します。2016-12-19にはバージョン3.3.2でしたが、その時の最新のものを使えばよいでしょう。



 インストールが終わってRを実行すると上のような画面が出てきます。コンソールといって、ここでRとやり取りをします。

 注意をしておきます。Rではどんどんクリックして進めていく、という方法ではありません。文字を打ってRに指令を与えます。

 はじめのうちは面倒だと思うかもしれませんが、面倒なことをやっただけのことは返ってくるので期待してください。

 それでは本日はここまで。