R入門

Rとは

Rとは、統計処理・データマイニング用のプログラミング言語および実行環境 (処理系 と呼ぶことがあります)です。もともと S言 語 (商用環境は S-PLUS )というものがあり、それと互換のあるフリーソ フトとして開発されています。近年、コンピュータの処理能力の向上で活用方 法が広がったこともあり、着目されるようになりました。

Rでは、いろいろな統計・データマイニング手法が比較的容易に利用できます。 特に近年の 「ビッグデータ」 ブームにのっかって(?)利用者 が増えています。とりあえず試してみるという用途にも適しており、それでい て本格的な利用にも耐えるものです。

他の言語との比較

特徴処理速度データ規模利用コスト
R 統計がメイ ン◎(無料)
SAS/SPSS 統計がメイン ×(高価)
Excel (VBA) 表計算(直感的?) ××△ (MS365 の一部)
C/C++ 汎用言語(開発は難易度大?) ◎(実装依存)○(フリーなものも高価なも のも)
Java 汎用言語(エンタープライズ系の標準) ◎(実装依存)○(フリーなものも高価なも のも)
python 汎用言語(インタープリタ…後述) ○(実装依存) ◎(基本的にフ リー)

この資料を読んでいる皆さんにとって一番馴染みがあるのは Excel (VBA,マクロ) かも知れません。使い慣れているでしょうし、さらに アドイン と呼ばれるものを追加することで、ある程度高度な分析も行な えます。しかし時系列分析や決定木、階層クラスター分析などの高度で複雑な 手法はRの方がずっと簡単に実行できます。

Rは見た目はちょっととっつきにくいかもしれませんが、慣れれば作業は簡単 だと思います。R はこれからのデータ分析の業界標準 (de facto standard) の1つになる可能性があると思っています。頑張って習得し ましょう。

現状では、R は特に社会科学系の(とりあえず分析をしたい?)人が多く使っ ているようです。理工系=人工知能技術のうち、特に今ブームになっている深 層学習の研究開発者は、パッケージが充実している python を使う人が多いと 思われます。実は前田もその一人です。 ちなみに「AIプログラミング実践」(3年次配当・後期金曜 1限)では python を使ってます。またゼミでも python を推しています。
とはいえ、分析ツールはあくまで目的ではなく手段ですので、 必要であれば状況に応じて使い分けてください(リンクも参照 のこと)。

Rの起動と準備

ここでは既にインストールされている前提で説明をすすめます。Rは前述の通り フリーソフトですので、自宅のPCにインストールできます。興味がある人 は  このページなどを参考にしてくだ さい。
それではまず起動してみましょう。スタートから辿ってプログラムファイルか らRを選択すると下記の画面(これは少し古い MacBook Airでの例です)が表 示されます。

シンプルな コンソール が立ち上がります。
コンソール とは聞きなれないかもしれませんが、元々はコンピュー タを操作するために使う入出力装置一式(端末)で、制御卓、操作卓などと も呼ばれるハードウェアのことです。端末という意味で ターミナ ル と呼ばれる場合もあります。
それらの延長で(特に?)コマンドとその結果など、文字入出力をつかさどる ため(だけ?)のアプリケーションソフトをコンソールとかターミナルと呼ぶ ことが多いです。TeraTerm, putty などがあります。
最後にある、
>
は、R の処理系(プログラム)が入力を促しているという意味です。これを 「プロンプト」 と呼びます。ここにRの 式(が命令、指示に対 応する) をどんどん入力していけば、その命令にしたがって処理を実行 してくれます。これはすなわち、命令で何か仕事をお願いするとそれに対応し た仕事をやってくれるという、命令を単語(語彙)としたコンピュータとの対 話と考えることが出来るかもしれません。
このような、1行ごとに逐次実行するやりかたを 「インタープリタ方式」 と呼びます。一方、Visual Studio でのプログラム作成方法のように、事前に プログラムコード全体を書きあげて、.exe のような実行形式に変換して、その ファイルを起動することでプログラムを実行する方式を 「コンパイラ方式」 と呼びます。ちなみにExcel の VBE (Visual Basic Editor) は事前に書きあげないと動きませんが、内部で は インタープリタ が動いているようです(詳細不明)。

ここでは詳細は略しますが、興味のある人は プログラミング言語の変遷 を 勉強してみてください。

まずはこれで準備完了となります。ちなみに、終了するときは(キャプチャ画 面にも書いてありますが)
q()
と入力すれば R を終了します。この時「作業スペースを保存しますか?」とい うダイアログが出てきますが、当面は「はい」で終わってもらえばいいと思い ます。

定番:Hello, world

どのプログラム言語でもまず最初に実行してみるプログラムは画面に Hello, world と表示させるもの、ということになっています。
多分、 Kernighan and Richie の "Programming Language C" からの伝統だと思われます。
ここでもそれに従い R プログラムをはじめてみます。R の入力画面で、
cat('Hello, world')
と入力してリターンキーを押してください。すると画面には
Hello, world
と出力されます。cat は、そのあとのカッコで囲んだところに書込んだ内容を そのまま出力するという機能を持ったもので、このようなものを 関数 と呼びます。
関数は大事な概念なので別資料で詳しく説明しますが、ここでは処理のかたま りに名前をつけたもの、くらいの理解をしておいてもらえればいいでしょう。

ちなみに cat は unix のコマンド(命令)から取って来たものと思われます。 一般的なプログラミング言語では、後述する print 系(?)で出力するほうが ポピュラーでしょう。

この場合、引用符で括った文字列 Hello, wolrd が出力されています。関数名 のうしろのカッコ内に書かれたものは一般に引数(ひきすう)と呼ばれ、関数 の内部での処理に使われます。上の例では引用符で括った文字列 'Hello, world' が引数となります。今、 'Hello, world'という文字列には最後に改行 がありませんから、'Hello, world' のすぐ後ろにプロンプトがついています。
Hello, world>
となっているはずです。もしちゃんと改行したければ、
この'\' は、次の文字が特殊なものですよ、と示すためのものでエスケー プ文字と呼ぶことがあります。ちなみにこの'\' は、状況によって 「¥」(円) の(いわゆる)半角に見える場合と、 「\」(バッ クスラッシュ) の半角に見える場合があると思います。入力の時も同 様で、円を入力したつもりなのにバックスラッシュになる場合があります。 これは JIS (日本工業規格)として 文字コードを制定したときの大失策(!!) で、日本語環 境はこのようなヘンテコなことになっています。詳細は略しますが、当面は 同じものとして(気にしないで?) ください。

ファイルからの実行

この授業で使うデータは、I: ドライブ直下の練習用ディレクトリ「I:\rdata」 フォルダに格納することにしましょう。エクスプローラで作っておいてくださ い。
上の説明にもあるように、この I: の次の字が「\」(の半角)に見え ているかもしれませんが、「¥」(の半角)と思ってください。UTF-8 だと 「\」がそのままに扱われるようです(詳細略)。

ちなみに R の環境の中では "I:/rdata/" と / (slash) でも フォルダ(ディレクトリ)の切れ目を表わせます。逆に、\(\)を使う場合は、 "I:\\rdata\\" のように2つ重ねないといけません(\は特殊文字なので)

…ややこしいですが、そういう仕様なので、頑張って(諦めて?)慣れてく ださい。個人的には "/" を使うのをお勧めします。

R への命令は、キーボードから入力画面へ逐次入力することができますが、い くつもの命令をまとめてひとつのファイルに書き並べ、これらを一度に実行さ せることもできます。これが R のブログラムです。全体としてひとつのまとまっ た作業をするように命令を組み合わせることができように書けるようになると、 どんどん便利になります。

ここでは上と同じ処理を、プログラムファイル中に書き込んでから実行させま す。練習用ディレクトリ rdata 内に、以下のような内容のテキストファイルを 作ります。メモ帳でも TeraPad でもすきなエディタを使ってもらっていいので すが、 機能の高い TeraPad を推奨します。

ここでは、まず一行だけのプログラムを自分で書いて実行してみます。

cat('Hello, world')
そして保存します。保存先は上で作っておいた(はずの) I:\rdata です。ファ イル名は任意ですが、このプログラムが hello という挨拶を出力することが分 かりやすいように、 hello.R としておいてください。拡張子 (ピ リオドの後の部分) の R は、このファイルが R のプログラムファイルであることが分かる ようにつけておくものです。

R 環境のなかで専用エディタを立ち上げて、ここで プログラムを編集す ることもできます。 メニューの[ファイル] → [新しいスクリプト] で、 あたらしいプログラムを編集するウィンドウが開きます。 ここに書込ん だプログラムは、メニューの[編集] → [すべて実行] あるいは → [カー ソル行または選択中のRコードを実行]で、実行することができます。

'スクリプト' 'コード' プログラム とほぼ同義です。また、こ こで作成したプログラムを[ファイル]→[別名で保存] (同名で上書きすると きは →[保存])で、保存することができます。 すぐ説明するように、.R が 付いた名前をつけて保存します。

... ということなのですが、この授業では TeraPad を使うということで統一し たいと思います。

R が注目する作業ディレクトリを、このプログラムファイルが置いてある 練習用ディレクトリに変更します。やりかたは、まず「ファイル」メニュー から「ディレクトリの変更」を選択し、「フォルダーの参照」が表示され ますので、「rdata」フォルダを選択すれば完了です。そして、入力画面 で
source('hello.R') 
と入力してリターンキーを押します。source も関数です。その機能は、カッ コの中に書込んだ名前のファイルを探しその内容を読み込んでプログラムとし て解釈して実行する、というものです。

source の中でディレクトリを直接指定することもできます。以下のようになります。

source('I:/rdata/hello.R') 

ここまでの作業がちゃんとできていれば、入力画面に、

Hello, world
と表示されるはずです。
※ファイルを保存するときには、Windows 環境下では、文字コードを SHIFT-JIS で保存するようにしてください。メニューの
「ファイル」⇒「文字/改行コード指定保存」
を使って文字コードを指定してください。改行コードは何でもいいですのでデ フォルトそのまま (CR-LF) を使ってください。

文字コードはデフォルトではUTF-8 になっているかもしれませんが、この場 合 BOM (Byte Order Mark) (エンディアンの説明は略)が余分につくことによって、悪 さをおこす場合があるからです。

<練習>
プログラム hello.R 中の、挨拶の文字列 'Hello, world' と部分をいろいろ 書き換えてください。さらに、 cat('...') という文を何行も並べ、それぞれ の挨拶の部分を書き換えてみてください。ちなみに、キーボード の カーソル(矢印キー)で過去の命令の入力の履歴が辿れ る ので活用してください。

演算子

R では、当然といえば当然ですが、いわゆる計算というものが簡単に出来 るようになっています。以下の演算子を使って計算します。一般的な算数 と同様のものに加えて、累乗や剰余も簡単に計算できます。下の表に載っ ている演算子以外に、( や ) などの括弧を使うことも出来ます。括弧は 計算の順序をかえる(括弧で囲んだものを先に計算する)ために使われま す。
記号意味
+ 加算(足し算)
- 減算(引き算)
* 乗算(掛け算)
/ 除算(割り算)
^ 累乗(べき乗)
%/% 整数商
%% 整数剰余(あまり)
R では入力として計算式を入力すると、その結果を返してくれます。
<練習>
以下の式をを計算してください。
1+2+3+4+5+6+7+8+9
12345679 * 8
1234 %% 17

変数:値を入れる箱

コンピュータは内部のメモリにデータをいくつか記憶して、それらを組合せて 使うことでいろいろな計算処理を行います。ハードウェアとしてのメモリには 番地(アドレス)が振られていて、その番地でアクセスしています。人間が番 地そのものを使ってプログラムを書くのはアセンブリ言語では可能ですが、か なり複雑な仕組みなので、あまりやりたい作業ではないでしょう。ですので、 ほとんどのプログラム言語では、メモリのどこかのエリアに場所を確保して、 そのメモリ中のデータがしまってある場所に名前をつけて、この名前を介して データの読み書きができるようになっています。 R も例外ではありません。そ れを変数 と呼びます。この、名前とメモリの場所の変換(対応付け) は、Rの処理系(プログラム)がやってくれることで、人間が楽が出来るという わけです。
ちなみに R の変数名のルールとしては、アルファベットで始まり、途中には数 字、ピリオド '.'、アンダーライン '_' を含むことができます(古い版の R では、アンダーラインは使えませんでした)。 大文字と小文字は別のものとし て扱われます。長さは特に制限はありません。最初に数字をつかうと数値と紛 らわしいので、他のプログラミング言語も大抵変数名としては使えないように なっています。
変数に何かの値を記録させたいとき、R では、
変数名 <- 値
という書き方をします。不等号(小なり)とハイフン(マイナス)を組み合わ せた左向きの矢印のような形で、右側の を左側の変数名が表 す メモリーの場所 に格納せよ、という指示を表現します。この操 作をプログラミングでは 代入 と呼びます。
多くのプログラミング言語では、代入をするときには = (equal) を使います。Excel VBA などでもそうだったはずです。個人的には、こ の代入の "=" と、比較演算子の "=" を同じ記号で使いまわすのが、非常に違 和感というか不自然感があります。そもそも同じ記号に複数の役割を持たすこ と自体がややこしいわけですが、特に代入に関して言うと、VBAでの
A = B
は、Bという変数の 中身の値 を、A という変数 (メモリ領域。 いうなれば「箱」) に入れるわけですが、この場合 "=" の 左右で (中の値か外の枠か、と)文脈が異なる というのが、特に初学者にとって不自然というか、理解しにくいものと なってるような気がしています。その意味で、Rで代入を "<-" としているのは、代入操作を矢印でイメージできるということで 非常に良いと思っています。
右側の「値」のところには、文字列 や数字をそのまま書いても良いです し、すでに存在している変数名を書いても良いです(その場合、変数の値 が左側の変数に代入される)、 関数を書いても良いですし(その場合、 関数が返す値が代入される)、 演算式を書いても良いです(演算結果が 代入される)。

a の中身を表示したければ、

print(a)
とすればコンソールに出力されますし、実は
a
とだけ打ち込んでも変数の中身が表示されます。
<練習>
  1. a <- 2*3 を実行してください
  2. 続けて a <- a^2 を実行してください。a の値はどうなりましたか? print(a) で確認してください。
    print(a)は?

プログラムファイルを作る意味

入力画面から一行づつ命令を書くかわりに、ファイルにプログラムを書い てこれを呼び出して実行すると、 という利点があります。

試行錯誤しながら細々とした作業をするだけであれば入力画面への入力だ けですませてよいのですが、何をしたか後で確認する必要がある(可能性が ある)場合や、試行錯誤の成果を自分で再利用したい場合、さらに、他の 人にも利用してもらいたい場合には、プログラムファイルを作ります。

入力画面でいろいろためしたあとで、プログラムファイルに必要な部分を コピーしておくだけでもよいでしょう。但しファイル中には、他人 が見ても分かるように、きちんと説明を書き込んでおきます。今 は分かっているつもりのことも、時間がたてば たちまち忘れます(1週 間後の自分は他人です)。

ここでは、さきほどの hello.R を、文字列をいちど変数に代入してから cat 関数に渡すように書き換えて、 hello2.R という別の名前のプログラ ムとして保存してみましょう。

x <- ('Hello, world\n')    #  挨拶の文字列を変数 x に代入する
cat(x)                     #  変数 x を関数 cat に渡す
x <- ('good bye, world\n') #  さよならの挨拶を変数 x に代入する
cat(x)                     #  再度変数 x を関数 cat に渡して出力する
挨拶の最後についている \n は、上にもあるように改行を指示する特殊文字で す。このプログラムを実行すると、「こんにちは」と「さようなら」(の英語) が続けて表示されるはずです。ちなみにプログラム中に # という文字があると、 その行のなかの # からうしろの部分はプログラムとして解釈されません。これ を コメント と呼びます。処理内容についてのメモを書いておきた いとき等に使います。VBA の「 ' 」 (quotation mark) と同じ役割です。

Excel で手作業することのデメリットのひとつは、作業の記録を残しにく いことです。間違った操作をしていないかあとからチェックできないし、 努力の成果の再利用もやりにくい。そもそもどういう操作をしたのかも 忘れてしまいがちです。 R ではせっかく作業内容を残せるので、簡単な 処理でもプログラムファイルに記録し、どういう目的でなにをしている のかの説明もコメントとして書いておく習慣をつけてましょう。



次の資料へ
目次にもどる
講義用スタイル
印刷用スタイル