4/ Rプログラミングの基本的な概念
関西大学総合情報学部
(本講義の内容に限定すると)パソコン内のファイルのあり方
levelName
1 .
2 ¦--ReadMe.docx
3 ¦--Day01
4 ¦ ¦--Day01.Rproj
5 ¦ ¦--Script01.R
6 ¦ ¦--Script02.R
7 ¦ ¦--Data
8 ¦ ¦ ¦--raw_data.csv
9 ¦ ¦ °--cleaned_data.csv
10 ¦ °--Figs
11 ¦ ¦--Figure01.png
12 ¦ °--Figure02.png
13 °--Day02
14 ¦--Day02.Rproj
15 ¦--Script01.R
16 ¦--Document01.qmd
17 ¦--Document01.html
18 ¦--Data
19 ¦ °--my_data.csv
20 °--Figs
21 ¦--Old
22 ¦ ¦--Figure01.pdf
23 ¦ ¦--Figure02.pdf
24 ¦ °--Figure03.pdf
25 °--New
26 °--Figure01.png
以下はJDCat分析ツールと同じLinuxの書き方(macOSも同様)
/(最上位フォルダー)で始まり、フォルダーは/で区切る。
ファイル名.拡張子」/ReadMe.docx/Day01/Script02.R/Day01/Data/cleaned_data.csv/Day02/Figs/New/Figure01.png levelName
1 .
2 ¦--ReadMe.docx
3 ¦--Day01
4 ¦ ¦--Day01.Rproj
5 ¦ ¦--Script01.R
6 ¦ ¦--Script02.R
7 ¦ ¦--Data
8 ¦ ¦ ¦--raw_data.csv
9 ¦ ¦ °--cleaned_data.csv
10 ¦ °--Figs
11 ¦ ¦--Figure01.png
12 ¦ °--Figure02.png
13 °--Day02
14 ¦--Day02.Rproj
15 ¦--Script01.R
16 ¦--Document01.qmd
17 ¦--Document01.html
18 ¦--Data
19 ¦ °--my_data.csv
20 °--Figs
21 ¦--Old
22 ¦ ¦--Figure01.pdf
23 ¦ ¦--Figure02.pdf
24 ¦ °--Figure03.pdf
25 °--New
26 °--Figure01.png
/)から始まるパス
/で始まらない/Day01/の場合
/Day01/Script02.RScript02.R/Day01/Data/cleaned_data.csvData/cleaned_data.csvgetwd()を入力すれば確認可能RStudioのプロジェクト機能
プロジェクト名.Rprojファイルが位置するフォルダーRStudioの右上を確認


<-演算子使用)
ls():作業環境内のオブジェクトリストを出力
[1] "my_vec1" "my_vec2" "my_vec3"
(.packages()):読み込まれたパッケージのリストを出力
[1] "stats" "graphics" "grDevices" "utils" "datasets" "methods" "base"
[1] "lubridate" "forcats" "stringr" "dplyr" "purrr" "readr" "tidyr"
[8] "tibble" "ggplot2" "tidyverse" "stats" "graphics" "grDevices" "utils"
[15] "datasets" "methods" "base"
オブジェクト (object) : メモリに割り当てられた「何か」
my_vec1という名前のオブジェクトとして格納Rに存在するあらゆるものはオブジェクトである(Chambers 2016)
“Everything that exists in R is an object”
2もオブジェクト
*もオブジェクトクラス (class): オブジェクトを特徴づける属性
class()関数で確認可能?関数名で確認可能mean()関数の例(Consoleペイン上で?mean)
mean()に使用可能な引数はx、trim、na.rmx: numeric型ベクトル、logical型ベクトルなどが使用可能na.rm: 長さ1のlogical型ベクトル(a logical value)のみ使用可能mean(c(1, 2, 3, NA, 5), na.rm = TRUE)関数 (function): 入力されたデータを内部で決められた手順に従って処理し、その結果を返すもの
関数名(関数の入力となるオブジェクト)
class(my_vec1)、sum(my_vec1)sum()関数の例
sumna.rmc(1, 2, 3, NA, 5)、TRUE
c(1, 2, 3, NA, 5)の仮引数名はない(ヘルプを見ると...と表示される)。このように仮引数名が存在しないケースもある。mean()のtrim引数の既定値は0(?mean参照)仮引数 = 実引数と表記されている場合、既定値が存在するy <- f(x = 5)かy <- f(5)と表記する。z <- g(a = 3, b = 5)かz <- g(3, 5)と表記する。p <- g(a = f(2), b = 9)と表記=でなく、<-を使用原則1: オブジェクト名は英数字と一部の記号(_と.)のみにする
原則2: 数字で始まる変数名、記号が含まれた変数名は指定できない
Error in parse(text = input): <text>:1:4: unexpected symbol
1: 100ABC
^
ただし、_と.は使用可能であり、.より_を推奨
原則3: 予約語を避ける
pi(円周率)、if、forなど原則4: 短さと分かりやすさの両立
例1: 変数の中身を見るまでは、どのような内容が入っているか分からない
例2: 長すぎて今後、打つのが面倒くさい
良い例: 改行あり
悪い例: 改行なし

+、-、*、%%、&、|、<-など^は例外()、{})内なら字下げも可読性の観点から重要
良い例:
悪い例:
以下のコードは全て同じであるが、可読性が桁違い(表形式データ作成の例)
良い例: 改行あり、字下げあり、スペースあり
悪い例: 改行あり、字下げなし、スペースあり
邪悪な例: 改行なし(=字下げなし)、スペースなし
中級者以上を目指すなら以下のようなプログラミングの知識は必須であるものの、本講義では一部を除き、解説しない。
詳細は教科書の第10章を参照
for()while()if()、else if()、else()ifelse()(\(\simeq\) if_else())
switch()チューリング完全な言語の2条件
データの読み書き、条件分岐、反復処理を覚えるだけで、パソコンで出来るすべてのことができる。
データの読み書き、条件分岐、反復処理だけですべてを処理しなければならない。