SlideShare a Scribd company logo
1 of 16
Download to read offline
Osaka.R#6 初心者講習会資料
                            2011/07/02
                             林真広


インストール
 インストーラのダウンロード
http://www.r-project.org/




                                         どちらかを選ぶ
                                         (どちらでも同じ)




                                1
※ Windows の場合




※ インストーラの実行時の注意点(windows)
 「インストール中に利用する言語」として Japanese が選択されているが,文字化けが発生する
  ので,English を選択しておく
 あくまで「インストール中に利用する言語」なので,インストール後は日本語化された R を使える




                            2
スクリプトの実行
     スクリプト(コマンド,プログラム,命令ともいう)をコンソール,またはエディタに書き込む
     エディタは,メニューバーから「ファイル>新しいスクリプト」とたどって起動する




                                         エディタ
     コンソール



     エディタに書いたスクリプトは,保存しておけば,一度 R を閉じても,「ファイル>スクリプト
      を開く」で読み込める
     コンソールにスクリプトを書き込んだ場合は,エンターキーを押せば実行される
     エディタに書き込んだ場合は,Ctrl+R でカーソルのある行のスクリプトが実行される
         範囲を選択して Ctrl+R を押せば,選択した範囲すべてが実行される
         「編集>カーソル行または選択中の R コードを実行」またはツールバーのボタンでも
          同じ




               TIPS & CAUTIONS!
☆ 大文字小文字,全角半角の区別あり(全角は基本的に使わないほうがいい!)
     特に記号の全角半角に注意が必要
     "”$$!!++--==(()) 見分けがつきますか…?
     変換ではなく IM を On/Off したほうが確実(日本語を使う機会は少ない)




                           3
コンソールの状態




    左は何でも入力できる状態。左端に「>」が表示されている
    右は続きの入力を待っている待機状態。左端に「+」が表示されている




                 TIPS & CAUTIONS!
    ☆ 待機状態の場合,「正しく」続きを入力しなければエラーになる
        「STOP」ボタン,「その他>現在の計算を中断」,Esc キーで待機状態をキャンセ
         ルできる




最初のスクリプト
# print という関数(機能)に"Hello, world!"という文字列を渡す
print("Hello, world!")
# コンソールに"Hello, world!"と表示される
# [1, 2, 5, 4]というベクトルを x という変数に保存
x <- c(1, 2, 5, 4)
# mean という関数に x を入力,出力を y という変数に保存
y <- mean(x)    # 平均値が計算される
# y の中身を表示
y
        R の操作には関数を使う
            基本的な操作は,「関数(値)」と命令するだけ。数学の f(x)と同じ
            さらに f(x)と同様に,入力に対して関数は必ず値を返す(値は数値とは限らない)


                                4
       関数に入力する値を引数(ひきすう)またはオプション,関数が返す値を返り値または戻り
            値と呼ぶ
                mean の例の場合,x という変数が引数,3 という数値が返り値
           複数の引数を関数に入力する場合,区切り文字として「,」を使う
                例えば「mean(x, na.rm=TRUE)」,na.rm は欠損値(NA)を省くか否か




                       TIPS & CAUTIONS!
☆ 「#」を書くと,それ以降はコメントとして扱われる(処理の上で無視される)
☆ 半角のスペースは見やすさのために記号や関数名の前後などに挿入できる
           「1 + 1」「print( "Hello, world!" )」「mean (x)」など
           「x<     -y」「me   an(x)」などはだめ
☆ 改行も適宜挿入できるが,挿入できる場所はコンマや記号の後ろにかぎられる


☆ スペースの使い方などは自分ルールでもいいが,Google's R Style Guide や R
    Coding Conventions などの既存のルールに従うと,読みやすいスクリプトが書け
    る(以下は例)
               一行は 80 文字程度(横スクロールバーが出ない程度の長さ)
               一行が長くなる場合は,コンマの後ろで適宜改行
               2 項演算子(=,+,-,<-など)の前後に半角スペース(「x <- y」や「1 + 1」)
               コンマの後ろに半角スペース(「c(1, 2, 3)」)




関数の使い方
   関数は,関数(引数 1, 引数 2, 引数 3, ...)というふうに使う
   引数は名前を持っていて,関数(名前=引数)という書き方をする

                                       初期値




                    引数の名前




                                       5
TIPS & CAUTIONS!
☆ 引数に初期値が設定されている場合,引数を省略できる
☆ 引数の名前は省略可能だが,省略できない場合もあるので省略しないほうが無難
         例えば 3 つ引数がある関数で第 2 引数を省略する場合,第 3 引数は名前を省
          略できない
         省略すると第 3 引数ではなく第 2 引数とみなされる




変数
   変数は入れ物のようなもの
   変数に入れる実体をオブジェクトと呼ぶ
   新たな変数を作るときは,「新たな変数 <- オブジェクト(または変数)」というふうに書く
   すべての関数は値(オブジェクト)を返すので,これも変数に入れられる
        「新たな変数 <- 関数(引数 1, 引数 2, 引数 3, ...)」とすればいい


オブジェクト
   オブジェクトにはクラス(種類)がある
   もっとも基本的なクラスは数値(numeric),文字列(character),論理(logical)クラス
   他 に 重 要 な ク ラ ス は 因 子 ( factor ) , 行 列 ( matrix ) , リ ス ト ( list ) , デ ー タ フ レ ー ム
    (data.frame)クラス
        ここでいう因子は因子分析の因子とは関係がなく,カテゴリ変数のこと
        行列は二次元の行列
        データフレームは,ケース(行)×変数(列)という形の,分析に用いるデータセット
        R を使う用途によってクラスの重要度は異なるので最初からすべて理解する必要はない
   オブジェクトのクラスによって扱いが異なるので,どのクラスのオブジェクトを操作しているのか
    を常に意識しよう




                                          6
理論編――――――――――――――――――――
数値(numeric)クラス
1 + 2
x <- 10 – 5
y <- x + 9
is.numeric(y) # 引数が数値クラスならば TRUE,そうでなければ FALSE を返す
4 * 5 / 10    # 「*」はかけ算,「/」は割り算
(3 + 6) * 2^3 # 「^」は累乗(この場合 2 の 3 乗)。演算の順番は数学と同じで,括弧も使える
c(1, 3) + 2   # [1, 3]というベクトルを作り,1 を足す
z <- 1:5      # [1, 2, 3, 4, 5]というベクトルを作る
z[2] + z[3]   # z の 2 番目の要素と 3 番目の要素を足しあわせる
     R ではほとんどのクラスのオブジェクトがベクトル
     一つの数字でも,長さ 1 のベクトル
     数学のベクトルのように難しく考えるのではなく,複数のオブジェクトをひとまとめにして便利に
      扱える機能と考えよう
     変数[数字]と書けば,その変数の中の,与えた数字の位置にある要素を取り出せる
         この数字を,添字またはインデックスと呼ぶ
行列(matrix)クラス
     2 次元の行列を扱うためのクラス
     行列演算する人は必須
     しない人は要素へのアクセスの仕方だけ覚えておけばだいたい大丈夫
         関数の返り値が行列のことがよくある
mat <- matrix(1:15, nrow=3, ncol=5, byrow=TRUE)
# nrow で行数,ncol で列数を指定(普通はどちらか一方でいい)
# byrow=TRUE にすると,ベクトルを行方向に並べて行列を作る(デフォルトは byrow=FALSE)
mat
mat <- matrix(1:15, nrow=3, ncol=5, byrow=FALSE)
mat
dim(mat)       # 行数,列数を取得
dimnames(mat) <- list(c("r1", "r2", "r3"),
                     c("c1", "c2", "c3", "c4", "c5"))   # 行名,列名を設定
mat[2, 3]      # mat[行, 列]の要素を取り出す
mat[2,]        # 2 行目全体を取り出す
mat[, 3]        # 3 列目全体を取り出す
mat[2, 1:3]        # 2 行目の 1~3 列目の要素を取り出す


                                    7
文字列(character)クラス
"文字列"              # ダブルコーテーションで文字を囲むと,文字列オブジェクトとして扱われる
v1 <- c("名前", "性別", "年齢")
is.character(v1)      # 引数が文字列クラスならば TRUE,そうでなければ FALSE を返す
is.numeric(v1)
v2 <- c("1", "2", "3") # 数値もダブルコーテーションで囲めば文字列オブジェクト
is.numeric(v2)
   ダブルコーテーションを全角にしないよう注意!
        日本語の文字列オブジェクトを作ろうとするときに失敗しやすい
   シングルコーテーションでもいい(「'文字列'」)
        文字列にダブルコーテーションを含めたい場合はシングルコーテーションを使う
        「'文字列の中に"を入れる'」
   文字列オブジェクトもベクトル


論理(logical)クラス
   条件判断や関数のオプションの ON,OFF に使われる
   TRUE,FALSE の 2 種類だけ
   TRUE は「真」,FALSE は「偽」
TRUE
“TRUE”           # 表示の違いに注目
TRUE <- “真” # TRUE,FALSE は変数名にはできない
x <- 4
x == 5
x < 5
y <- x >= 4      # 変数にも入れられる
y                # 論理ベクトル
is.logical(y)
x <- 1:4
x[c(TRUE, TRUE, FALSE, FALSE)] # 添字の代わりに論理ベクトルで要素を選択
x <= 2
x[x <= 2]     # 応用的な要素の選択方法。条件によって要素を選択
print(“R”, quote=TRUE)     # 関数の引数として論理オブジェクトを使う
print(“R”, quote=F)       # 引数の場合,TRUE は T,FALSE は F と省略できる
   省略記法は間違いの元なので最初のうちはあまり使わない方がいい




                                   8
データフレーム(data.frame)クラス
     表形式のデータを扱うためのクラス
     一列が一つの変数
sex <- c("男性", "男性", "男性", "女性", "女性", "女性")
age <- c(20, 35, 50, 42, 31, 22)
df <- data.frame(sex, age)
df
df$sex        # データフレーム内の変数にアクセス
df[["age"]]   # 変数にアクセスするもう一つの方法
colnames(df) # 変数名の取得
colnames(df)[1] <- "性別" # 変数名の変更


df$job <- c(1, 0, 1, 0, 1, 0) # 新しい変数の作成
attach(df)    # データフレーム内の変数を大局的環境に展開
mean(age)     # データフレーム内の変数を直接扱える,が…
age <- c(10, 10, 10, 10, 10, 10)
detach(df)    # attach の解除
df$age        # attach 中の変数の編集は反映されない
     同じ長さのベクトルを引数に取る
     引数は主に数値オブジェクトか文字列オブジェクト
         ただし,文字列オブジェクトはデフォルトでは因子(factor)オブジェクトに変換される
     attach は便利だが,エラーのもとになりやすいので推奨しない


因子(factor)クラス
     文字列オブジェクトに,カテゴリの概念を加えたものと考えればいい
     各種カテゴリカルデータ分析に必要
sex       # 文字列オブジェクト
df$sex    # 因子オブジェクト。表示の違いに注目
summary(df$sex)   # カテゴリの概念があるので,カテゴリごとに集計できる




                                   9
リスト(list)クラス
    各種クラスのオブジェクトをひとまとめにするためのオブジェクト
    データフレームは実はリストの拡張なので,操作方法は似ている
l1 <- list(num=1:5,
         char=c("a", "b", "c", "d"),
         mat=matrix(1:9, ncol=3))   # 「名前=オブジェクト(または変数)」で要素を設定
# リストにはなんでも入る!
# なんらかの統計解析をおこなう関数は,たいてい返り値がリスト
l1
l1[["num"]]
li$num       # 要素へのアクセスの仕方はデータフレームと同じ


実際の分析
data(iris)      # R に組み込まれているデータの読み込み
is.data.frame(iris) # データフレームオブジェクト
summary(iris)         # データフレームの概要
cor(iris$Sepal.Length, iris$Sepal.Width)    # 相関係数の計算


median(iris$Sepal.Length) # 中央値
iris$cat1 <- "high"         # 新しい変数
iris$cat1[iris$Sepal.Length < 5.8] <- "low"
# Sepal.Length が 5.8 以下ならば"low"というカテゴリに


table(iris$Species, iris$cat1)      # クロス表作成




                                       10
実践編――――――――――――――――――――
作業ディレクトリの設定
   作業ディレクトリ(ディレクトリはフォルダとだいたい同じ意味)とは,データの入出力の際に基
    準となるディレクトリ
   作業の前にまず設定しておく
# 現在の作業ディレクトリを返す(Get Working Directory)
getwd()
# 作業ディレクトリの設定(Set Working Directory)
setwd("c:/Users/UserName/Documents")
# R でのディレクトリの区切り文字は"/"もしくは Windows の場合は"¥¥"も可
# ダイアログで対話的にディレクトリを選択し,ディレクトリのパスを返す(Windows 限定?)
choose.dir()
# choose.dir()のファイル版(Mac にもある)
file.choose()
# 対話的にディレクトリを選択し,作業ディレクトリに設定する
setwd(choose.dir())




                TIPS & CAUTIONS!
 ☆ 作業ディレクトリは GUI からも設定できる
         ただし,スクリプトに setwd(…)を書いて保存しておけば,繰り返し作業する場
          合に設定が楽




                                   11
パッケージのインストール,読み込み
   パッケージの追加により機能を増やせる(最初から入っているパッケージもある)
       メニューバーから”パッケージ>パッケージのインストール”
       どのミラーからダウンロードするかを選ぶ。ダウンロードできるものはどこでも同じなので,
        Japan の中から好きなものを選ぶ
   関数を使ってインストールすることもできる
install.packages("Hmisc")
# 一覧から探す必要がないのでおすすめ
install.packages(c("memisc", "car"))
# 複数まとめてインストールすることもできる


library(memisc)     # パッケージの読み込み


分析例
 サンプルデータは http://www.spss.co.jp/support/sample.html からダウンロード
 作業ディレクトリに保存しておく




library(foreign)
d1 <- read.spss("bank.sav", to.data.frame=TRUE, reencode="shift-jis")


t.test(SALNOW ~ SEX, data=d1)   # t 検定(ウェルチ)
t.test(d1$SALNOW, d1$SALBEG, paired=TRUE)    # 対応のある t 検定
aov1 <- aov(SALNOW ~ SEXRACE, data=d1)      # 分散分析
summary(aov1)      # 結果の概要


lm1 <- lm(SALNOW ~ AGE + SEX*MINORITY + JOBCAT, data=d1)   # 重回帰分析
summary(lm1)      # 結果の概要




                                   12
テキストデータの読み込み
read.csv(file.choose(), header=TRUE)
# 対話的にデータを読み込み
read.csv("sample.csv", header=TRUE)
# 作業ディレクトリから sample.csv を読み込み
# header オプションは一行目を列の名前(変数名)として読み込むかどうか
read.delim("sample.txt", header=TRUE) # tab 区切りの場合
# data.frame 形式で読み込まれる




                   TIPS & CAUTIONS!
 ☆ データがうまく読み込めない場合
       文字化け…文字コードが合っていない。fileEncoding オプションに文字コー
        ドを指定する。日本語の場合,文字コードは shift-jis か UTF-8
           read.csv("sample.csv", fileEncoding="UTF-8")
       欠 損 値 の 処 理 … 欠損 値が 含 まれ る 場 合 は,欠 損値 に あ ててい る 文 字 を
        na.strings オプションに設定する
           read.csv("sample.csv", na.strings="NA")
       変数がおかしい…変数が数値の場合,変数の中に全角数字がないか,文字が
        含まれていないかを確認する



他のソフトウェアのデータの読み込み
   R は様々な形式のデータを読み込むことができる
library(foreign)    # 他形式のデータの入出力用パッケージ
d1 <- read.spss("bank.sav", to.data.frame=TRUE, reencode="shift-jis")
# reencode は文字コードの指定。Windows の場合はたいていなくても大丈夫
# 他にも read.xport,read.dta などがある


データの書き込み
write.csv(d1, "sample.csv", row.names=FALSE)
# 作業ディレクトリに d1 を csv で保存
write.table(d1, "sample.dat", row.names=FALSE, sep="¥t")
# 作業ディレクトリに d1 を tab 区切りテキストで保存



                                      13
データの操作
summary(d1)     # 全データの要約統計量
head(d1)        # データの先頭数行を表示。末尾は tail(...)
colnames(d1)    # データに含まれる変数の名前を取得


d1$SEX          # 変数へのアクセス
d1$SEX[5]       # 変数の 5 番目のケース


データの閲覧(単純集計表)
# カテゴリ変数の場合
table(d1$JOBCAT)
summary(d1$JOBCAT)


# 連続変数の場合
table(d1$AGE)      # 実用的ではない
stem(d1$AGE)       # 幹葉図
boxplot(d1$AGE) # 箱ひげ図
hist(d1$AGE, breaks="FD")       # ヒストグラム
# breaks は区切り方の指定。デフォルトの方法は古典的すぎるので変更


データの閲覧(記述統計)
summary(d1$SALNOW)
mean(d1$SALNOW, na.rm=TRUE)
# na.rm オプションは欠損値を省くかどうか
# このデータには欠損値がないのでどちらでも結果は変わらない
sd(d1$SALNOW, na.rm=TRUE)     # 不偏標準偏差
# 他にも var(),max(),min(),range()などがある
# na.rm はこれら記述統計の関数では大概使えるが,常に使えるわけではない


データの閲覧(クロス集計表)
table(d1$MINORITY, d1$JOBCAT)     # 行,列の順番


library(memisc)      # memisc は社会科学系で便利な機能がまとめられている
aggregate(JOBCAT ~ MINORITY, data=d1)      # 返り値は data.frame
aggregate(percent(JOBCAT) ~ MINORITY, data=d1)     # パーセントで表示



                                    14
変数のリコード
   リコードの方法はたくさんあるが,memisc パッケージの recode 関数が最も汎用的
   Hmisc,car パッケージにも recode 関数がある。先に読み込んだものが上書きされるので,
    memisc を最後に読み込むように!
d1$AGE3 <- recode(d1$AGE,
                 "低" <- range(min , 40),
                 "中" <- range(40.01, 60),
                 "高" <- range(60.01, max))
# 「d1$新しい変数名 <- 新しい変数」でデータフレームに変数を追加
d1$JOB3 <- recode(d1$JOBCAT,
            "事務"        <- c("事務職", "事務研修員"),
            "マニュアル" <- "警備員",
            "専門・管理" <- c("専門職研修員", "管理職", "MBA 研修員", "技術職"))
   R ではカテゴリ変数と連続変数が明確に区別されることに注意!




                TIPS & CAUTIONS!
 ☆ recode 関数のバグ
       memisc の現在のバージョンでは,recode 関数にバグがある
       欠損値の含まれている量的変数(数値ベクトル)をリコードしようとすると,エラー
        が出る
       その場合は一時的に欠損値を別の値に置き換えてリコードするとよい
           d1$AGE[is.na(d1$AGE)] <- 999 # 欠損値を 999 に置き換え
       詳細は http://d.hatena.ne.jp/phosphor_m/20110629/1309339215




                                  15
ドキュメント編――――――――――――――――――
help 等のドキュメントの使い方
   関数を初めて使うとき,使い方がよくわからないとき,エラーが出るとき,必ず help を読む!
   特に初めて使う関数の help は,流し読みでもいいから絶対に目を通す!
help(var)
?var    # help(var)と同じ。利便性のための省略形。


help の読み方
   すべて理解する必要はない
   Usage には関数の使い方が書いてある
       引数のクラスによって使い方がちがう関数の場合,クラス別の使い方が書いてある(ことも
        ある)
   最も重要なのは Arguments
       引数の説明が書いてある
       最も多いエラーは Type Error(数値が必要なところに因子を渡す等,クラスの間違い)
       エラーなら実害はないが,期待とはちがう処理が行われていることも…
       どの引数にどのクラスのオブジェクトを渡さなければならないかを確認する!
   Value には返り値の詳細が書いてあるのでこれも重要
   References には参考になる論文や web ページが書いてある
   See Also には似た機能を持つ関数や関連する関数が書いてある
   Example は二番目に重要
       文章を読んで分からなくても,実際に動かしてみたら分かることがよくある
       example 関数は,help 内の example をまとめて実行してくれる
example(lm)


新しいパッケージを使うとき(demo,vignette,パッケージの help)
   使ってみたいパッケージの情報がウェブや書籍で見つからない場合がある
       そうでなくとも新しいパッケージは使い方がよくわからないもの
   デモ,ビネット(vignette),パッケージの help を見れば多くの情報を得ることができる
   ただし,デモとビニエットは必ずあるわけではない
demo(package="graphics")     # graphics パッケージが持っているデモの一覧
demo("graphics")
vignette(package="memisc")    # memisc パッケージが持っているビニエットの一覧
vignette("anes48")
help(package="Hmisc")      # Hmisc パッケージのヘルプ

                                   16

More Related Content

What's hot

ジェネリクスの基礎と クラス設計への応用
ジェネリクスの基礎とクラス設計への応用ジェネリクスの基礎とクラス設計への応用
ジェネリクスの基礎と クラス設計への応用nagise
 
Essential Scala 第5章 シーケンス処理
Essential Scala 第5章 シーケンス処理Essential Scala 第5章 シーケンス処理
Essential Scala 第5章 シーケンス処理Takuya Tsuchida
 
普通のプログラミング言語R
普通のプログラミング言語R普通のプログラミング言語R
普通のプログラミング言語RShuyo Nakatani
 
Yamadai.Rデモンストレーションセッション
Yamadai.RデモンストレーションセッションYamadai.Rデモンストレーションセッション
Yamadai.Rデモンストレーションセッション考司 小杉
 
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Ransui Iso
 
BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdfHiroshi Ono
 
JavaのGenericsとは?
JavaのGenericsとは?JavaのGenericsとは?
JavaのGenericsとは?Kenji Nakamura
 
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Naoki Aoyama
 
Material
MaterialMaterial
Material_TUNE_
 
PHP, JavaScriptプログラマのためのC#入門
PHP, JavaScriptプログラマのためのC#入門PHP, JavaScriptプログラマのためのC#入門
PHP, JavaScriptプログラマのためのC#入門Tomo Mizoe
 
たのしい高階関数
たのしい高階関数たのしい高階関数
たのしい高階関数Shinichi Kozake
 
ゆるふわScalaコップ本読書会 第7章
ゆるふわScalaコップ本読書会 第7章ゆるふわScalaコップ本読書会 第7章
ゆるふわScalaコップ本読書会 第7章Yuta Yokoi
 
Interpreting Tree Ensembles with inTrees
Interpreting Tree Ensembles with  inTreesInterpreting Tree Ensembles with  inTrees
Interpreting Tree Ensembles with inTreesSatoshi Kato
 
R による文書分類入門
R による文書分類入門R による文書分類入門
R による文書分類入門Takeshi Arabiki
 
Imputation of Missing Values using Random Forest
Imputation of Missing Values using  Random ForestImputation of Missing Values using  Random Forest
Imputation of Missing Values using Random ForestSatoshi Kato
 
What Dotty fixes @ Scala関西サミット
What Dotty fixes @ Scala関西サミットWhat Dotty fixes @ Scala関西サミット
What Dotty fixes @ Scala関西サミットTaisuke Oe
 

What's hot (18)

ジェネリクスの基礎と クラス設計への応用
ジェネリクスの基礎とクラス設計への応用ジェネリクスの基礎とクラス設計への応用
ジェネリクスの基礎と クラス設計への応用
 
Essential Scala 第5章 シーケンス処理
Essential Scala 第5章 シーケンス処理Essential Scala 第5章 シーケンス処理
Essential Scala 第5章 シーケンス処理
 
普通のプログラミング言語R
普通のプログラミング言語R普通のプログラミング言語R
普通のプログラミング言語R
 
Yamadai.Rデモンストレーションセッション
Yamadai.RデモンストレーションセッションYamadai.Rデモンストレーションセッション
Yamadai.Rデモンストレーションセッション
 
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2
 
BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdf
 
Pythonintro
PythonintroPythonintro
Pythonintro
 
JavaのGenericsとは?
JavaのGenericsとは?JavaのGenericsとは?
JavaのGenericsとは?
 
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術
 
Material
MaterialMaterial
Material
 
PHP, JavaScriptプログラマのためのC#入門
PHP, JavaScriptプログラマのためのC#入門PHP, JavaScriptプログラマのためのC#入門
PHP, JavaScriptプログラマのためのC#入門
 
たのしい高階関数
たのしい高階関数たのしい高階関数
たのしい高階関数
 
たのしい関数型
たのしい関数型たのしい関数型
たのしい関数型
 
ゆるふわScalaコップ本読書会 第7章
ゆるふわScalaコップ本読書会 第7章ゆるふわScalaコップ本読書会 第7章
ゆるふわScalaコップ本読書会 第7章
 
Interpreting Tree Ensembles with inTrees
Interpreting Tree Ensembles with  inTreesInterpreting Tree Ensembles with  inTrees
Interpreting Tree Ensembles with inTrees
 
R による文書分類入門
R による文書分類入門R による文書分類入門
R による文書分類入門
 
Imputation of Missing Values using Random Forest
Imputation of Missing Values using  Random ForestImputation of Missing Values using  Random Forest
Imputation of Missing Values using Random Forest
 
What Dotty fixes @ Scala関西サミット
What Dotty fixes @ Scala関西サミットWhat Dotty fixes @ Scala関西サミット
What Dotty fixes @ Scala関西サミット
 

Viewers also liked

Packages for data wrangling データ前処理のためのパッケージ
Packages for data wrangling データ前処理のためのパッケージPackages for data wrangling データ前処理のためのパッケージ
Packages for data wrangling データ前処理のためのパッケージHiroki K
 
Kobe.R #15 - Incanter チョットシッテル
Kobe.R #15 - Incanter チョットシッテルKobe.R #15 - Incanter チョットシッテル
Kobe.R #15 - Incanter チョットシッテルtnoda
 
Rデータ処理入門
Rデータ処理入門Rデータ処理入門
Rデータ処理入門Hiroki K
 
R6 classes
R6 classesR6 classes
R6 classeshiroki84
 
Mad kobe.r14
Mad kobe.r14Mad kobe.r14
Mad kobe.r14florets1
 
サポートベクトルマシン入門
サポートベクトルマシン入門サポートベクトルマシン入門
サポートベクトルマシン入門Wakamatz
 
Factor型の注意点
Factor型の注意点Factor型の注意点
Factor型の注意点Hiroki K
 
Kobe.R #18: 本の紹介: 通称「緑本」
Kobe.R #18: 本の紹介: 通称「緑本」Kobe.R #18: 本の紹介: 通称「緑本」
Kobe.R #18: 本の紹介: 通称「緑本」tnoda
 

Viewers also liked (10)

Packages for data wrangling データ前処理のためのパッケージ
Packages for data wrangling データ前処理のためのパッケージPackages for data wrangling データ前処理のためのパッケージ
Packages for data wrangling データ前処理のためのパッケージ
 
Kobe.R #15 - Incanter チョットシッテル
Kobe.R #15 - Incanter チョットシッテルKobe.R #15 - Incanter チョットシッテル
Kobe.R #15 - Incanter チョットシッテル
 
R in life science2
R in life science2R in life science2
R in life science2
 
Rデータ処理入門
Rデータ処理入門Rデータ処理入門
Rデータ処理入門
 
R6 classes
R6 classesR6 classes
R6 classes
 
Mad kobe.r14
Mad kobe.r14Mad kobe.r14
Mad kobe.r14
 
サポートベクトルマシン入門
サポートベクトルマシン入門サポートベクトルマシン入門
サポートベクトルマシン入門
 
Factor型の注意点
Factor型の注意点Factor型の注意点
Factor型の注意点
 
Kobe.R #18: 本の紹介: 通称「緑本」
Kobe.R #18: 本の紹介: 通称「緑本」Kobe.R #18: 本の紹介: 通称「緑本」
Kobe.R #18: 本の紹介: 通称「緑本」
 
R in life science
R in life scienceR in life science
R in life science
 

Similar to 初心者講習会資料(Osaka.r#6)

第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案yushin_hirano
 
第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章Tomonobu_Hirano
 
言語処理系入門3
言語処理系入門3言語処理系入門3
言語処理系入門3Kenta Hattori
 
第一回ゆるふわーる
第一回ゆるふわーる第一回ゆるふわーる
第一回ゆるふわーるSachiko Hirata
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Ransui Iso
 
Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章Prunus 1350
 
プログラミング言語Scala
プログラミング言語Scalaプログラミング言語Scala
プログラミング言語ScalaTanUkkii
 
Ruby紹介3(pdf)
Ruby紹介3(pdf)Ruby紹介3(pdf)
Ruby紹介3(pdf)Gohryuh
 
20170923 excelユーザーのためのr入門
20170923 excelユーザーのためのr入門20170923 excelユーザーのためのr入門
20170923 excelユーザーのためのr入門Takashi Kitano
 
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)YoheiOkuyama
 
統計環境R_データ入出力編2016
統計環境R_データ入出力編2016統計環境R_データ入出力編2016
統計環境R_データ入出力編2016wada, kazumi
 
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと 12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと Haruka Ozaki
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードShigenori Sagawa
 
RSpecのここがすごい!
RSpecのここがすごい!RSpecのここがすごい!
RSpecのここがすごい!mitim
 
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門Koichi Hamada
 

Similar to 初心者講習会資料(Osaka.r#6) (20)

第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案
 
第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章
 
言語処理系入門3
言語処理系入門3言語処理系入門3
言語処理系入門3
 
第一回ゆるふわーる
第一回ゆるふわーる第一回ゆるふわーる
第一回ゆるふわーる
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
 
Tokyor23 doradora09
Tokyor23 doradora09Tokyor23 doradora09
Tokyor23 doradora09
 
Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章
 
プログラミング言語Scala
プログラミング言語Scalaプログラミング言語Scala
プログラミング言語Scala
 
Ruby紹介3(pdf)
Ruby紹介3(pdf)Ruby紹介3(pdf)
Ruby紹介3(pdf)
 
20170923 excelユーザーのためのr入門
20170923 excelユーザーのためのr入門20170923 excelユーザーのためのr入門
20170923 excelユーザーのためのr入門
 
Python opt
Python optPython opt
Python opt
 
Aedlabo program 20150125
Aedlabo program 20150125Aedlabo program 20150125
Aedlabo program 20150125
 
Introduction Xtend
Introduction XtendIntroduction Xtend
Introduction Xtend
 
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)
 
統計環境R_データ入出力編2016
統計環境R_データ入出力編2016統計環境R_データ入出力編2016
統計環境R_データ入出力編2016
 
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと 12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
 
はじめての「R」
はじめての「R」はじめての「R」
はじめての「R」
 
RSpecのここがすごい!
RSpecのここがすごい!RSpecのここがすごい!
RSpecのここがすごい!
 
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門
 

More from Masahiro Hayashi

オレオレR-GUIを作りたい
オレオレR-GUIを作りたいオレオレR-GUIを作りたい
オレオレR-GUIを作りたいMasahiro Hayashi
 
Rzパッケージの紹介
Rzパッケージの紹介Rzパッケージの紹介
Rzパッケージの紹介Masahiro Hayashi
 
重回帰職人の朝は早い
重回帰職人の朝は早い重回帰職人の朝は早い
重回帰職人の朝は早いMasahiro Hayashi
 
Rzパッケージ―spssのようなデータ管理インターフェイス
Rzパッケージ―spssのようなデータ管理インターフェイスRzパッケージ―spssのようなデータ管理インターフェイス
Rzパッケージ―spssのようなデータ管理インターフェイスMasahiro Hayashi
 
はじめてでもわかるデータ入出力
はじめてでもわかるデータ入出力はじめてでもわかるデータ入出力
はじめてでもわかるデータ入出力Masahiro Hayashi
 

More from Masahiro Hayashi (6)

オレオレR-GUIを作りたい
オレオレR-GUIを作りたいオレオレR-GUIを作りたい
オレオレR-GUIを作りたい
 
Rzパッケージの紹介
Rzパッケージの紹介Rzパッケージの紹介
Rzパッケージの紹介
 
重回帰職人の朝は早い
重回帰職人の朝は早い重回帰職人の朝は早い
重回帰職人の朝は早い
 
Rzパッケージ―spssのようなデータ管理インターフェイス
Rzパッケージ―spssのようなデータ管理インターフェイスRzパッケージ―spssのようなデータ管理インターフェイス
Rzパッケージ―spssのようなデータ管理インターフェイス
 
はじめてでもわかるデータ入出力
はじめてでもわかるデータ入出力はじめてでもわかるデータ入出力
はじめてでもわかるデータ入出力
 
RGtk2入門
RGtk2入門RGtk2入門
RGtk2入門
 

Recently uploaded

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 

Recently uploaded (9)

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 

初心者講習会資料(Osaka.r#6)

  • 1. Osaka.R#6 初心者講習会資料 2011/07/02 林真広 インストール  インストーラのダウンロード http://www.r-project.org/ どちらかを選ぶ (どちらでも同じ) 1
  • 2. ※ Windows の場合 ※ インストーラの実行時の注意点(windows)  「インストール中に利用する言語」として Japanese が選択されているが,文字化けが発生する ので,English を選択しておく  あくまで「インストール中に利用する言語」なので,インストール後は日本語化された R を使える 2
  • 3. スクリプトの実行  スクリプト(コマンド,プログラム,命令ともいう)をコンソール,またはエディタに書き込む  エディタは,メニューバーから「ファイル>新しいスクリプト」とたどって起動する エディタ コンソール  エディタに書いたスクリプトは,保存しておけば,一度 R を閉じても,「ファイル>スクリプト を開く」で読み込める  コンソールにスクリプトを書き込んだ場合は,エンターキーを押せば実行される  エディタに書き込んだ場合は,Ctrl+R でカーソルのある行のスクリプトが実行される  範囲を選択して Ctrl+R を押せば,選択した範囲すべてが実行される  「編集>カーソル行または選択中の R コードを実行」またはツールバーのボタンでも 同じ TIPS & CAUTIONS! ☆ 大文字小文字,全角半角の区別あり(全角は基本的に使わないほうがいい!)  特に記号の全角半角に注意が必要  "”$$!!++--==(()) 見分けがつきますか…?  変換ではなく IM を On/Off したほうが確実(日本語を使う機会は少ない) 3
  • 4. コンソールの状態  左は何でも入力できる状態。左端に「>」が表示されている  右は続きの入力を待っている待機状態。左端に「+」が表示されている TIPS & CAUTIONS! ☆ 待機状態の場合,「正しく」続きを入力しなければエラーになる  「STOP」ボタン,「その他>現在の計算を中断」,Esc キーで待機状態をキャンセ ルできる 最初のスクリプト # print という関数(機能)に"Hello, world!"という文字列を渡す print("Hello, world!") # コンソールに"Hello, world!"と表示される # [1, 2, 5, 4]というベクトルを x という変数に保存 x <- c(1, 2, 5, 4) # mean という関数に x を入力,出力を y という変数に保存 y <- mean(x) # 平均値が計算される # y の中身を表示 y  R の操作には関数を使う  基本的な操作は,「関数(値)」と命令するだけ。数学の f(x)と同じ  さらに f(x)と同様に,入力に対して関数は必ず値を返す(値は数値とは限らない) 4
  • 5. 関数に入力する値を引数(ひきすう)またはオプション,関数が返す値を返り値または戻り 値と呼ぶ  mean の例の場合,x という変数が引数,3 という数値が返り値  複数の引数を関数に入力する場合,区切り文字として「,」を使う  例えば「mean(x, na.rm=TRUE)」,na.rm は欠損値(NA)を省くか否か TIPS & CAUTIONS! ☆ 「#」を書くと,それ以降はコメントとして扱われる(処理の上で無視される) ☆ 半角のスペースは見やすさのために記号や関数名の前後などに挿入できる  「1 + 1」「print( "Hello, world!" )」「mean (x)」など  「x< -y」「me an(x)」などはだめ ☆ 改行も適宜挿入できるが,挿入できる場所はコンマや記号の後ろにかぎられる ☆ スペースの使い方などは自分ルールでもいいが,Google's R Style Guide や R Coding Conventions などの既存のルールに従うと,読みやすいスクリプトが書け る(以下は例)  一行は 80 文字程度(横スクロールバーが出ない程度の長さ)  一行が長くなる場合は,コンマの後ろで適宜改行  2 項演算子(=,+,-,<-など)の前後に半角スペース(「x <- y」や「1 + 1」)  コンマの後ろに半角スペース(「c(1, 2, 3)」) 関数の使い方  関数は,関数(引数 1, 引数 2, 引数 3, ...)というふうに使う  引数は名前を持っていて,関数(名前=引数)という書き方をする 初期値 引数の名前 5
  • 6. TIPS & CAUTIONS! ☆ 引数に初期値が設定されている場合,引数を省略できる ☆ 引数の名前は省略可能だが,省略できない場合もあるので省略しないほうが無難  例えば 3 つ引数がある関数で第 2 引数を省略する場合,第 3 引数は名前を省 略できない  省略すると第 3 引数ではなく第 2 引数とみなされる 変数  変数は入れ物のようなもの  変数に入れる実体をオブジェクトと呼ぶ  新たな変数を作るときは,「新たな変数 <- オブジェクト(または変数)」というふうに書く  すべての関数は値(オブジェクト)を返すので,これも変数に入れられる  「新たな変数 <- 関数(引数 1, 引数 2, 引数 3, ...)」とすればいい オブジェクト  オブジェクトにはクラス(種類)がある  もっとも基本的なクラスは数値(numeric),文字列(character),論理(logical)クラス  他 に 重 要 な ク ラ ス は 因 子 ( factor ) , 行 列 ( matrix ) , リ ス ト ( list ) , デ ー タ フ レ ー ム (data.frame)クラス  ここでいう因子は因子分析の因子とは関係がなく,カテゴリ変数のこと  行列は二次元の行列  データフレームは,ケース(行)×変数(列)という形の,分析に用いるデータセット  R を使う用途によってクラスの重要度は異なるので最初からすべて理解する必要はない  オブジェクトのクラスによって扱いが異なるので,どのクラスのオブジェクトを操作しているのか を常に意識しよう 6
  • 7. 理論編―――――――――――――――――――― 数値(numeric)クラス 1 + 2 x <- 10 – 5 y <- x + 9 is.numeric(y) # 引数が数値クラスならば TRUE,そうでなければ FALSE を返す 4 * 5 / 10 # 「*」はかけ算,「/」は割り算 (3 + 6) * 2^3 # 「^」は累乗(この場合 2 の 3 乗)。演算の順番は数学と同じで,括弧も使える c(1, 3) + 2 # [1, 3]というベクトルを作り,1 を足す z <- 1:5 # [1, 2, 3, 4, 5]というベクトルを作る z[2] + z[3] # z の 2 番目の要素と 3 番目の要素を足しあわせる  R ではほとんどのクラスのオブジェクトがベクトル  一つの数字でも,長さ 1 のベクトル  数学のベクトルのように難しく考えるのではなく,複数のオブジェクトをひとまとめにして便利に 扱える機能と考えよう  変数[数字]と書けば,その変数の中の,与えた数字の位置にある要素を取り出せる  この数字を,添字またはインデックスと呼ぶ 行列(matrix)クラス  2 次元の行列を扱うためのクラス  行列演算する人は必須  しない人は要素へのアクセスの仕方だけ覚えておけばだいたい大丈夫  関数の返り値が行列のことがよくある mat <- matrix(1:15, nrow=3, ncol=5, byrow=TRUE) # nrow で行数,ncol で列数を指定(普通はどちらか一方でいい) # byrow=TRUE にすると,ベクトルを行方向に並べて行列を作る(デフォルトは byrow=FALSE) mat mat <- matrix(1:15, nrow=3, ncol=5, byrow=FALSE) mat dim(mat) # 行数,列数を取得 dimnames(mat) <- list(c("r1", "r2", "r3"), c("c1", "c2", "c3", "c4", "c5")) # 行名,列名を設定 mat[2, 3] # mat[行, 列]の要素を取り出す mat[2,] # 2 行目全体を取り出す mat[, 3] # 3 列目全体を取り出す mat[2, 1:3] # 2 行目の 1~3 列目の要素を取り出す 7
  • 8. 文字列(character)クラス "文字列" # ダブルコーテーションで文字を囲むと,文字列オブジェクトとして扱われる v1 <- c("名前", "性別", "年齢") is.character(v1) # 引数が文字列クラスならば TRUE,そうでなければ FALSE を返す is.numeric(v1) v2 <- c("1", "2", "3") # 数値もダブルコーテーションで囲めば文字列オブジェクト is.numeric(v2)  ダブルコーテーションを全角にしないよう注意!  日本語の文字列オブジェクトを作ろうとするときに失敗しやすい  シングルコーテーションでもいい(「'文字列'」)  文字列にダブルコーテーションを含めたい場合はシングルコーテーションを使う  「'文字列の中に"を入れる'」  文字列オブジェクトもベクトル 論理(logical)クラス  条件判断や関数のオプションの ON,OFF に使われる  TRUE,FALSE の 2 種類だけ  TRUE は「真」,FALSE は「偽」 TRUE “TRUE” # 表示の違いに注目 TRUE <- “真” # TRUE,FALSE は変数名にはできない x <- 4 x == 5 x < 5 y <- x >= 4 # 変数にも入れられる y # 論理ベクトル is.logical(y) x <- 1:4 x[c(TRUE, TRUE, FALSE, FALSE)] # 添字の代わりに論理ベクトルで要素を選択 x <= 2 x[x <= 2] # 応用的な要素の選択方法。条件によって要素を選択 print(“R”, quote=TRUE) # 関数の引数として論理オブジェクトを使う print(“R”, quote=F) # 引数の場合,TRUE は T,FALSE は F と省略できる  省略記法は間違いの元なので最初のうちはあまり使わない方がいい 8
  • 9. データフレーム(data.frame)クラス  表形式のデータを扱うためのクラス  一列が一つの変数 sex <- c("男性", "男性", "男性", "女性", "女性", "女性") age <- c(20, 35, 50, 42, 31, 22) df <- data.frame(sex, age) df df$sex # データフレーム内の変数にアクセス df[["age"]] # 変数にアクセスするもう一つの方法 colnames(df) # 変数名の取得 colnames(df)[1] <- "性別" # 変数名の変更 df$job <- c(1, 0, 1, 0, 1, 0) # 新しい変数の作成 attach(df) # データフレーム内の変数を大局的環境に展開 mean(age) # データフレーム内の変数を直接扱える,が… age <- c(10, 10, 10, 10, 10, 10) detach(df) # attach の解除 df$age # attach 中の変数の編集は反映されない  同じ長さのベクトルを引数に取る  引数は主に数値オブジェクトか文字列オブジェクト  ただし,文字列オブジェクトはデフォルトでは因子(factor)オブジェクトに変換される  attach は便利だが,エラーのもとになりやすいので推奨しない 因子(factor)クラス  文字列オブジェクトに,カテゴリの概念を加えたものと考えればいい  各種カテゴリカルデータ分析に必要 sex # 文字列オブジェクト df$sex # 因子オブジェクト。表示の違いに注目 summary(df$sex) # カテゴリの概念があるので,カテゴリごとに集計できる 9
  • 10. リスト(list)クラス  各種クラスのオブジェクトをひとまとめにするためのオブジェクト  データフレームは実はリストの拡張なので,操作方法は似ている l1 <- list(num=1:5, char=c("a", "b", "c", "d"), mat=matrix(1:9, ncol=3)) # 「名前=オブジェクト(または変数)」で要素を設定 # リストにはなんでも入る! # なんらかの統計解析をおこなう関数は,たいてい返り値がリスト l1 l1[["num"]] li$num # 要素へのアクセスの仕方はデータフレームと同じ 実際の分析 data(iris) # R に組み込まれているデータの読み込み is.data.frame(iris) # データフレームオブジェクト summary(iris) # データフレームの概要 cor(iris$Sepal.Length, iris$Sepal.Width) # 相関係数の計算 median(iris$Sepal.Length) # 中央値 iris$cat1 <- "high" # 新しい変数 iris$cat1[iris$Sepal.Length < 5.8] <- "low" # Sepal.Length が 5.8 以下ならば"low"というカテゴリに table(iris$Species, iris$cat1) # クロス表作成 10
  • 11. 実践編―――――――――――――――――――― 作業ディレクトリの設定  作業ディレクトリ(ディレクトリはフォルダとだいたい同じ意味)とは,データの入出力の際に基 準となるディレクトリ  作業の前にまず設定しておく # 現在の作業ディレクトリを返す(Get Working Directory) getwd() # 作業ディレクトリの設定(Set Working Directory) setwd("c:/Users/UserName/Documents") # R でのディレクトリの区切り文字は"/"もしくは Windows の場合は"¥¥"も可 # ダイアログで対話的にディレクトリを選択し,ディレクトリのパスを返す(Windows 限定?) choose.dir() # choose.dir()のファイル版(Mac にもある) file.choose() # 対話的にディレクトリを選択し,作業ディレクトリに設定する setwd(choose.dir()) TIPS & CAUTIONS! ☆ 作業ディレクトリは GUI からも設定できる  ただし,スクリプトに setwd(…)を書いて保存しておけば,繰り返し作業する場 合に設定が楽 11
  • 12. パッケージのインストール,読み込み  パッケージの追加により機能を増やせる(最初から入っているパッケージもある)  メニューバーから”パッケージ>パッケージのインストール”  どのミラーからダウンロードするかを選ぶ。ダウンロードできるものはどこでも同じなので, Japan の中から好きなものを選ぶ  関数を使ってインストールすることもできる install.packages("Hmisc") # 一覧から探す必要がないのでおすすめ install.packages(c("memisc", "car")) # 複数まとめてインストールすることもできる library(memisc) # パッケージの読み込み 分析例  サンプルデータは http://www.spss.co.jp/support/sample.html からダウンロード  作業ディレクトリに保存しておく library(foreign) d1 <- read.spss("bank.sav", to.data.frame=TRUE, reencode="shift-jis") t.test(SALNOW ~ SEX, data=d1) # t 検定(ウェルチ) t.test(d1$SALNOW, d1$SALBEG, paired=TRUE) # 対応のある t 検定 aov1 <- aov(SALNOW ~ SEXRACE, data=d1) # 分散分析 summary(aov1) # 結果の概要 lm1 <- lm(SALNOW ~ AGE + SEX*MINORITY + JOBCAT, data=d1) # 重回帰分析 summary(lm1) # 結果の概要 12
  • 13. テキストデータの読み込み read.csv(file.choose(), header=TRUE) # 対話的にデータを読み込み read.csv("sample.csv", header=TRUE) # 作業ディレクトリから sample.csv を読み込み # header オプションは一行目を列の名前(変数名)として読み込むかどうか read.delim("sample.txt", header=TRUE) # tab 区切りの場合 # data.frame 形式で読み込まれる TIPS & CAUTIONS! ☆ データがうまく読み込めない場合  文字化け…文字コードが合っていない。fileEncoding オプションに文字コー ドを指定する。日本語の場合,文字コードは shift-jis か UTF-8  read.csv("sample.csv", fileEncoding="UTF-8")  欠 損 値 の 処 理 … 欠損 値が 含 まれ る 場 合 は,欠 損値 に あ ててい る 文 字 を na.strings オプションに設定する  read.csv("sample.csv", na.strings="NA")  変数がおかしい…変数が数値の場合,変数の中に全角数字がないか,文字が 含まれていないかを確認する 他のソフトウェアのデータの読み込み  R は様々な形式のデータを読み込むことができる library(foreign) # 他形式のデータの入出力用パッケージ d1 <- read.spss("bank.sav", to.data.frame=TRUE, reencode="shift-jis") # reencode は文字コードの指定。Windows の場合はたいていなくても大丈夫 # 他にも read.xport,read.dta などがある データの書き込み write.csv(d1, "sample.csv", row.names=FALSE) # 作業ディレクトリに d1 を csv で保存 write.table(d1, "sample.dat", row.names=FALSE, sep="¥t") # 作業ディレクトリに d1 を tab 区切りテキストで保存 13
  • 14. データの操作 summary(d1) # 全データの要約統計量 head(d1) # データの先頭数行を表示。末尾は tail(...) colnames(d1) # データに含まれる変数の名前を取得 d1$SEX # 変数へのアクセス d1$SEX[5] # 変数の 5 番目のケース データの閲覧(単純集計表) # カテゴリ変数の場合 table(d1$JOBCAT) summary(d1$JOBCAT) # 連続変数の場合 table(d1$AGE) # 実用的ではない stem(d1$AGE) # 幹葉図 boxplot(d1$AGE) # 箱ひげ図 hist(d1$AGE, breaks="FD") # ヒストグラム # breaks は区切り方の指定。デフォルトの方法は古典的すぎるので変更 データの閲覧(記述統計) summary(d1$SALNOW) mean(d1$SALNOW, na.rm=TRUE) # na.rm オプションは欠損値を省くかどうか # このデータには欠損値がないのでどちらでも結果は変わらない sd(d1$SALNOW, na.rm=TRUE) # 不偏標準偏差 # 他にも var(),max(),min(),range()などがある # na.rm はこれら記述統計の関数では大概使えるが,常に使えるわけではない データの閲覧(クロス集計表) table(d1$MINORITY, d1$JOBCAT) # 行,列の順番 library(memisc) # memisc は社会科学系で便利な機能がまとめられている aggregate(JOBCAT ~ MINORITY, data=d1) # 返り値は data.frame aggregate(percent(JOBCAT) ~ MINORITY, data=d1) # パーセントで表示 14
  • 15. 変数のリコード  リコードの方法はたくさんあるが,memisc パッケージの recode 関数が最も汎用的  Hmisc,car パッケージにも recode 関数がある。先に読み込んだものが上書きされるので, memisc を最後に読み込むように! d1$AGE3 <- recode(d1$AGE, "低" <- range(min , 40), "中" <- range(40.01, 60), "高" <- range(60.01, max)) # 「d1$新しい変数名 <- 新しい変数」でデータフレームに変数を追加 d1$JOB3 <- recode(d1$JOBCAT, "事務" <- c("事務職", "事務研修員"), "マニュアル" <- "警備員", "専門・管理" <- c("専門職研修員", "管理職", "MBA 研修員", "技術職"))  R ではカテゴリ変数と連続変数が明確に区別されることに注意! TIPS & CAUTIONS! ☆ recode 関数のバグ  memisc の現在のバージョンでは,recode 関数にバグがある  欠損値の含まれている量的変数(数値ベクトル)をリコードしようとすると,エラー が出る  その場合は一時的に欠損値を別の値に置き換えてリコードするとよい  d1$AGE[is.na(d1$AGE)] <- 999 # 欠損値を 999 に置き換え  詳細は http://d.hatena.ne.jp/phosphor_m/20110629/1309339215 15
  • 16. ドキュメント編―――――――――――――――――― help 等のドキュメントの使い方  関数を初めて使うとき,使い方がよくわからないとき,エラーが出るとき,必ず help を読む!  特に初めて使う関数の help は,流し読みでもいいから絶対に目を通す! help(var) ?var # help(var)と同じ。利便性のための省略形。 help の読み方  すべて理解する必要はない  Usage には関数の使い方が書いてある  引数のクラスによって使い方がちがう関数の場合,クラス別の使い方が書いてある(ことも ある)  最も重要なのは Arguments  引数の説明が書いてある  最も多いエラーは Type Error(数値が必要なところに因子を渡す等,クラスの間違い)  エラーなら実害はないが,期待とはちがう処理が行われていることも…  どの引数にどのクラスのオブジェクトを渡さなければならないかを確認する!  Value には返り値の詳細が書いてあるのでこれも重要  References には参考になる論文や web ページが書いてある  See Also には似た機能を持つ関数や関連する関数が書いてある  Example は二番目に重要  文章を読んで分からなくても,実際に動かしてみたら分かることがよくある  example 関数は,help 内の example をまとめて実行してくれる example(lm) 新しいパッケージを使うとき(demo,vignette,パッケージの help)  使ってみたいパッケージの情報がウェブや書籍で見つからない場合がある  そうでなくとも新しいパッケージは使い方がよくわからないもの  デモ,ビネット(vignette),パッケージの help を見れば多くの情報を得ることができる  ただし,デモとビニエットは必ずあるわけではない demo(package="graphics") # graphics パッケージが持っているデモの一覧 demo("graphics") vignette(package="memisc") # memisc パッケージが持っているビニエットの一覧 vignette("anes48") help(package="Hmisc") # Hmisc パッケージのヘルプ 16