R クイックリファレンス — 簡潔なリファレンス
R 4.4の構文、データ構造、最もよく使われるbase R / tidyverseのクイックリファレンスマニュアルで、日常シーンの約80%をカバーする。
R R 4.4
R(GNU R / 対話型インタプリタ) · 関数型 · ベクトル化 · オブジェクト指向 (S3 / S4 / R6) · 動的
おすすめの学習パス
まずRscriptの実行と代入(<-)を学ぶ → ベクトルやdata.frameなどのデータ構造を習得する → if/for/applyファミリーでフローを書く → 関数、クロージャ、パイプ |> を学ぶ → applyによる集合操作を深く学ぶ → S3/R6オブジェクト指向とエラー処理を理解する → 必要に応じてファイルI/O、並列処理、ネットワーク、正規表現を学ぶ。FAQセクションは後でつまづきを避けるのに適している;パッケージ管理与renvはビルドの章を参照。
1.Hello Worldと実行環境
Rscriptの実行、REPL対話、印刷出力とヘルプドキュメント。
最小プログラム
Rは式単位で評価する。printはオブジェクトを表示し、catは直接出力する。スクリプトはRscriptで実行できる。
代入と出力
代入は<-または=を使う。printはオブジェクトの構造を表示し、catは連結出力に適する。messageはstderrに書き出す。
Rscriptの実行
Rscriptは非対話方式でスクリプトを実行し、バッチ処理やコマンドラインに適する。sourceはセッション内でスクリプトファイルを実行する。
コマンドライン引数
commandArgs(trailingOnly = TRUE)でスクリプトに続くコマンドライン引数を取得する。引数はすべて文字列である。
出力の印刷
printはオブジェクトと構造を表示し、catは引用符なしで連結し、sprintfは書式化する。invisibleは自動印刷を抑制する。
ヘルプドキュメント
?はヘルプを開き、??は全文検索する。argsは関数の仮引数を表示し、exampleはサンプルを実行する。
パッケージの読み込み
libraryはパッケージを検索パスに読み込み、requireは論理値を返す。::はパッケージ内の関数を明示的に取得する。
スクリプトの実行
sourceは現在のセッションでスクリプトファイルを実行し、関数と変数を定義できる。echoは実行過程を表示する。
2.変数と定数
代入、基本型、NA/NULL、型変換について。
代入記号
<-が慣用的な代入で、=も使える。<<-は関数内で外側の変数に書き込む。グローバル代入はassignを使う。
基本型
原子ベクトルにはnumeric、integer、character、logicalがある。整数はL接尾辞を使う。typeofは格納型を返す。
NAとNULL
NAは欠損値を表し、NULLは空オブジェクトを表す。is.na / is.nullで判定する。NaNは非数値、Infは無限大。
型変換
as.*は明示的な変換。c()で異なる型を連結すると最も汎用的な型に自動変換される。判定にはis.*を使う。
ベクトルの作成
cは連結、コロンは連続生成、seqは歩幅指定、repは繰り返し。namesは要素に名前を付ける。
命名規則
変数名には英字、数字、ドット、アンダースコアが使え、数字で始められない。ドットはRでは演算子ではない。
変数の管理
lsは変数を列挙し、rmは削除する。existsは存在を判定する。rm(list = ls())は環境を空にする。
組み込み定数
Rにはpi、letters、month.nameなどのよく使う定数と、.Machineというプラットフォーム詳細がある。
スコープの基礎
Rはレキシカルスコープを持つ。関数内では変数を外側へ順に探す。グローバルと局所で同名だと局所が覆う。getは環境を指定して取得する。
3.データ型とデータ構造
ベクトル、ファクター、行列、リスト、データフレーム、tibbleなど、Rのデータ構造の体系。
ベクトル
原子ベクトルは同質で一次元であり、Rの最も基本的な構造である。c()で作成し、インデックスは1から始まる。
ファクター
ファクターはカテゴリ変数を保持し、levelsでカテゴリを固定する。順序付きファクターは順序を表す。as.factor / factorで作成する。
行列
matrixは二次元の同質構造。byrowは埋め込み方向を制御する。行名・列名はdimnamesで扱う。
配列
arrayは任意の次元の同質構造である。dimで各次元の長さを指定する。多次元テンソルに適する。
リスト
listは異種でネストできる。$と[[は要素を取り、[はサブリストを返す。lengthは要素数を返す。
データフレーム
data.frameは表形式データで、列は異種でもよい。既定ではstringsAsFactors=FALSE(R 4.0以降)。str / headで確認する。
tibble
tibbleはtidyverseの現代的なデータフレームである。遅延評価の列、印刷の見やすさ、文字列をファクターにしないなどの特徴を持つ。
属性
attributesはメタ情報を保持する。names、dim、classなど。attrは個別に読み書きする。structureは一度に構築する。
型の判定
is.*で型を判定し、class / typeof / modeで型を見る。as.*で変換する。is.data.frameなどは分岐に使う。
4.参照とオブジェクトのセマンティクス
Rには生のポインタはない。copy-on-modifyの値セマンティクスとenvironmentの参照セマンティクスがある。
コピーオンライト
Rはコピー時に変更する(copy-on-modify)方式である。代入はデータを共有し、実際に変更されたときにのみ複製される。大きなオブジェクトに別名を付けてもコストはほぼゼロである。
tracememによるコピー追跡
tracememはオブジェクトをマークし、Rがそのオブジェクトを実際にコピーするときにアドレスの変化を表示する。想定外のコピーやメモリ使用量の診断に使う。
環境の参照
environmentはRの参照オブジェクトである。関数に渡してもコピーされず、関数内で変更すればそのまま反映される。Rの「ポインタ」に相当する。
可変状態のコンテナ
environmentを可変状態のコンテナとして使う。カウンタ、キャッシュ、アキュムレータなど。グローバル変数の汚染を避け、状態を明示的に受け渡す。
シャローコピーとディープコピー
リストの代入はシャローコピーであり、サブオブジェクトを共有する。ネストした要素を変更するとその層だけがコピーされる。ディープコピーは明示的に実装する必要がある。
参照クラスR6
R6は参照セマンティクスのクラスである。オブジェクトは参照で渡され、メソッドはコピーではなく元のオブジェクトを変更する。状態管理に適する。
data.tableの参照
data.tableは:=でインプレースに変更する(参照セマンティクス)。data.frameはコピーセマンティクスである。setDTでインプレースにdata.tableに変換できる。
オブジェクトのサイズ
object.sizeは個々のオブジェクトの使用量を返し、gcはメモリ全体を見る。lobstr::obj_sizeは共有量も計算できる。
明示的なコピー
独立したコピーが必要な場合は明示的に複製する。リストはlapplyで再帰的に、data.tableはcopyで、ベクトルは[]でコピーできる。
5.制御フロー
if / else、ベクトル化されたifelse、for / while、switch、そして論理演算について。
if / else
ifの条件は長さ1でなければならない。1以外の場合は先頭要素が使われ警告が出る。elseはifと同じ行の閉じ括弧の位置を揃える。
ifelseのベクトル化
ifelseはベクトルの要素ごとに条件を判定し、条件と同じ長さの結果を返す。一括置換に適する。
forループ
forはベクトルやシーケンスを順に処理する。seq_alongでインデックスに沿って走査し、1:lengthの空シーケンスの罠を避ける。
whileとrepeat
whileは条件を判定してから実行する。repeatは無条件ループで、breakで抜ける。どちらも無限ループに注意する。
nextとbreak
nextは次の反復へ進み、breakはループを抜ける。スキップや早期終了に適する。
switch
switchは位置または名前で分岐する。数値はn番目、文字は名前で一致する分岐を返し、一致しない場合はNULLを返す。
ループよりベクトル化を優先する
R では明示的なループの代わりにベクトル化を使う:ベクトル全体を一度に計算するので速くて簡潔だ。ループはベクトル化できない場面のために取っておく。
論理演算
& | はベクトル化された論理演算で、&& || は最初の要素だけを評価する(短絡評価)。any/all で集約する。
インデックス走査
seq_along / seq_len でインデックスを作り、rev で逆順にする。which で位置を取得する。split でグループごとにループする。
6.関数とクロージャ
関数定義、引数、遅延評価、可変長引数、クロージャとパイプ。
関数定義
function で関数を定義し、本体の最後の式が返り値になる。無名関数はそのまま引数として渡せる。
引数とデフォルト値
関数の引数にはデフォルト値を設定できる。呼び出し時は名前を省いて位置で渡すことも、名前付きで渡すこともできる。missing で引数が与えられたかを判定する。
遅延評価
R の引数は遅延評価される:使うときに初めて評価され、使わなければエラーにもならない。force で先に評価を強制できる。これはクロージャで特に重要になる。
可変長引数
... は任意個数の引数を受け取る。list(...) でまとめ、do.call でリストを使って関数を動的に呼び出す。
返り値
関数は最後の式を返す。return で早めに返せる。invisible を使うと返り値が自動で表示されない。
クロージャ
関数は自分が作られた環境を捕捉するので、内部状態を持ち運べる。ファクトリ関数は状態を持つ新しい関数を生成する。
無名関数
無名関数は関数リテラルで、apply 系や purrr でよく使う。R 4.1 以降は \\(x) という短縮記法が使える。
高階関数
関数は引数として別の関数に渡せるし、関数を返すこともできる。Map / Reduce / Filter などが組み込みの高階関数だ。
パイプ
ネイティブパイプ |> は左側の結果を右側の関数の第一引数に渡し、入れ子の呼び出しを一直線に書けるようにする。%>% は magrittr 版のパイプ。
7.文字列
文字ベクトル、連結、部分取得、分割、正規表現とフォーマット。
文字列の基礎
文字ベクトルは引用符で囲み、ダブルクォートとシングルクォートは等価。nchar で長さを調べ、[] で要素を取り出す。バックスラッシュはエスケープが必要。
連結
paste は既定で空白区切り、paste0 は区切りなし。collapse でベクトル全体を一つの文字列にまとめる。連結もベクトル化される。
部分文字列
substr / substring は位置を指定して切り出し、[] では個々の要素を取り出す。strsplit で分割する。
分割
strsplit は区切り文字でリストに分解する。unlist で平坦化する。区切りには正規表現も使える。
正規表現関数
grep / grepl でマッチし、gsub / sub で置換する。どれもベクトル化されており要素ごとに処理される。詳しくは正規表現の章を参照。
フォーマット
sprintf は C の printf に似た書式化を行う。%s は文字列、%d は整数、%f は浮動小数点。formatC / round で数値の見せ方を調整する。
大文字小文字と空白除去
toupper / tolower で大文字小文字を変換し、trimws で空白を取り除く。chartr は文字単位の置換を行う。データの整形でよく使う。
エンコーディング処理
R の文字列は基本的に UTF-8。Encoding でエンコーディングを確認し、enc2utf8 で変換する。iconv で文字コードを変換する。
stringr
tidyverse の文字列処理パッケージ。str_ 接頭辞で命名が統一されており、str_detect / str_replace / str_extract などがある。
8.集合と apply ファミリー
apply / lapply / sapply による一括処理、ソート、重複除去、集合演算と dplyr のデータ操作。
lapply と sapply
lapply はリストやベクトルの各要素に関数を適用してリストを返す。sapply は結果をベクトルや行列に簡約しようとする。
apply
apply は行列や配列の次元に沿って一括計算する。MARGIN=1 は行方向、2 は列方向。返り値は次元に応じて組み立てられる。
mapply と複数引数
mapply は複数の引数に並行して関数を適用し、Map に対応する。短い引数はリサイクルされて長さが揃えられる。SIMPLIFY で簡約するかどうかを制御する。
split でグループ化
split は因子に従ってベクトルをグループごとのリストに分ける。lapply と組み合わせればグループ集計ができ、group-by に相当する。
ソートと順位付け
sort はベクトルを並べ替え、order は並べ替え後のインデックスを返し、rank は順位を返す。decreasing で並び順を指定する。データフレームは列を指定して並べ替える。
重複除去
unique で重複を取り除き、duplicated で重複要素に印を付ける。重複した行は最初のものが残る。all.equal でベクトルを比較する。
集合演算
union / intersect / setdiff で集合演算を行う。%in% で要素の有無を判定する。unique した上で和・積・差をとる。
リスト操作
リストの結合、平坦化、まとめてのリネーム。unlist は再帰的に平坦化し、do.call で配列に組み立てる。purrr は型を意識した操作を提供する。
dplyr のデータ操作
select/filter/mutate/arrange/summarise をパイプでつないでデータフレームを操作し、group_by でグループ化する。tidyverse の中核となる部分。
9.メモリ管理
ガベージコレクション、オブジェクトサイズ、コピーコスト、事前確保と性能分析。
ガベージコレクション
R は参照カウントと定期的な GC を自動で行う。gc を呼べば手動で回収し、結果を報告させられる。大きなデータのループの後に呼ぶとよい。
オブジェクトのサイズ
object.size で個々のオブジェクトのバイト数を確認する。format で読みやすい単位に変換する。大きなデータセットではメモリ使用量を見積もっておく必要がある。
コピーコスト
R は値セマンティクスなので変更時にオブジェクト全体をコピーし、大きなオブジェクトほど変更のコストが高い。大きなベクトルの要素を何度も書き換えるのは避ける。
事前確保
先に必要な長さの結果ベクトルを確保してからループで埋めれば、連結のたびにコピーが起きるのを防げる。numeric や character であらかじめ確保しておく。
ベクトル化と性能
できるだけベクトル全体で計算する。行の結合は rbind の繰り返しが遅いので、do.call(rbind, list) や data.table を使う。マイクロベンチマークで確かめる。
メモリ上限
memory.limit(Windows)で上限を確認・調整する。object.size で使用量を調べる。ulimit はセッション全体に影響する。
性能分析
Rprof は関数呼び出しにかかった時間を記録する。summaryRprof で集計する。system.time はおおまかな計測に使う。profvis で可視化する。
data.table のメモリ
data.table は参照セマンティクスでコピーを減らす::= でその場を書き換え、setDT で変換し、copy で明示的に複製する。大きなデータセットほどメモリを節約できる。
10.オブジェクト指向 (S3 / S4 / R6)
S3 の簡易ジェネリック、S4 の形式的なクラス、R6 の参照クラスという 3 つの OO システムがそれぞれの役割を担う。
S3 クラスの基礎
S3 は R の簡易的な OO で、class 属性とジェネリック関数からなる。unclass で内部の構造を確認できる。最もよく使われ、最も軽量。
S3 メソッド
class.method という名前の関数を定義するだけでジェネリックを実装できる。UseMethod がディスパッチを行う。NextMethod で親のメソッドを呼ぶ。
S3 のコンストラクタ
自作クラスにはコンストラクタと検証の仕組みを用意する。structure を使えば一度にクラスを設定できる。print / summary を定義して出力をカスタマイズする。
S4 クラス
S4 は形式的な OO で、setClass でスロットを定義し、validity で検証し、setGeneric / setMethod でジェネリックを定める。
R6 クラス
R6 は参照セマンティクスのカプセル化クラスで、メソッド内では self$ でアクセスする。オブジェクト指向プログラミングが他の言語により近くなる。
ジェネリック dispatch
dispatch はオブジェクトの class 属性に基づき、UseMethod が class に対応するメソッドを探す。旧クラス (S3) は階層的に試行する。
継承
S3 は class 属性で継承し (NextMethod チェーン)、S4 は contains、R6 は inherit を使う。
三方式の比較
S3 は軽量で大半のパッケージに使用、S4 は厳密な定義向け、R6 の参照セマンティクスは状態を持つオブジェクトに適する。実際には多くが併用される。
class と属性
class は特殊な属性で、ジェネリックはこれを見て dispatch する。attr で独自の属性を追加できるが、dispatch には影響しない。class<- で直接 class を設定できる。
11.エラー処理
stop でエラー、warning で警告、tryCatch で捕捉、条件システムを扱う。
stop でエラー
stop はエラーを投げて実行を停止する。stopifnot は条件を手早く検証する。エラーメッセージは原因を明確に書くのが望ましい。
warning で警告
warning は致命的でない通知を出して中断しない。suppressWarnings で黙らせる。options(warn=2) でエラーに変換できる。
tryCatch
tryCatch はエラーや警告を捕捉して処理結果を返す。error、warning、finally の三つで構成される。
try でフォールトトレラント
try は式の結果を返し、エラー発生時には try-error クラスのオブジェクトを返して全体は中断しない。バッチ処理でよく使われる。
条件システム
R のエラー・警告・メッセージはすべて条件オブジェクトである。signalCondition で発火し、withCallingHandlers で捕捉して続行する。
警告のインターセプト
withCallingHandlers は警告を捕捉するが実行は止めず、記録して続行できる。invokeRestart と組み合わせる。
restarts 復元ポイント
シグナル処理の上級者向け仕組みで、呼び出し側が復元動作を提供できる。invokeRestart を捕捉側で呼び出す。
ループ内のエラー
バッチ処理では一つの失敗が全体を中断させてはならない。tryCatch で個別にフォールトトレラントにして結果を保持する。
カスタムエラー
カスタムエラークラスは追加フィールドを持てる。simpleError や structure で構築し、class で型を表す。
12.ファイルとデータ I/O
CSV、readr、行単位読み込み、RDS、JSON、コネクションオブジェクト、バイナリを扱う。
CSV の読み書き
read.csv / write.csv で CSV を読み書きする。stringsAsFactors=FALSE で因子化を防ぐ。check.names で列名を処理する。
readr での読み書き
readr は tidyverse の高速 CSV 読み込みパッケージである。read_csv は型を自動推論し、write_csv は高速に書き出す。
行単位読み込み
readLines で行ごとに文字ベクトルとして読む。writeLines で書き出す。大ファイルはチャンク単位で読む。
read.table で表を読む
read.table は汎用的なテーブル読み込みで、read.csv はその変種である。header / sep / na.strings はよく使う引数である。
RDS への保存と読込
saveRDS は単一の R オブジェクトを保存し、readRDS で読み戻す。型と属性を保持するため CSV より完全である。
JSON の読み書き
jsonlite は主流の JSON パッケージである。fromJSON で解析、toJSON でシリアライズする。改行区切りの JSON は API レスポンスの処理に使う。
コネクションオブジェクト
コネクションはファイルやネットワークなどのデータソースを抽象化したものである。file で開き、readLines / writeLines で読み書きし、close で閉じる。
バイナリの読み書き
readBin / writeBin でバイナリを読み書きする。raw 型はバイト列を保持する。大容量ファイルや画像データはバイナリを使う。
その他のフォーマット
readxl は Excel を読み、haven は SPSS/Stata を読む。feather / parquet は列指向フォーマットである。必要に応じて読み込む。
13.よくある落とし穴
R で日常的によく踏む落とし穴と正しい書き方。
条件の長さが 1 ではない
if は長さ 1 の条件を要求し、ベクトル条件は先頭要素のみを判定して警告が出る。any / all で集約するか ifelse を使う。
因子を数値へ変換
因子を直接 as.numeric で変換すると内部コードが返る。一度文字に変換してから数値にすると正しい値になる。
次元の喪失
行列から 1 行 / 1 列を取り出すと既定ではベクトルに次元が落ちる。drop = FALSE で次元を維持できる。
ループでのベクトル伸長
ループ内で c() で連結するたびにベクトル全体がコピーされ極めて遅い。先に確保するかベクトル化する。
NA と比較
NA を比較に含めると NA になり、FALSE にはならない。NA を除外するには is.na で判定する。
部分一致
$ と [[ はユニークな接頭辞で一致する。列名の略記が静かに動作するためバグが潜みがちで、完全に書くか dplyr を使う。
ベクトルのリサイクル
短いベクトルは演算時に長い側の長さに合わせて循環補完される。長さの比が整数倍でない場合は警告のみで、潜んだバグになりやすい。
リストのフラット化
c() はリストに対してトップ階層を平坦化しようとする。リストの要素をリストとして入れるには list() を使う。unlist の再帰的な平坦化には落とし穴がある。
パッケージのシャドウィング
library で読み込んだパッケージは同名の関数を覆い隠す。search 順で後ろにあるものが先に隠れる。:: で曖昧さを解消できる。
14.並列と並行処理
parallel、mclapply、foreach、future による R のマルチプロセス並列。
parallel の概要
R の並列はマルチプロセス (fork) またはソケットに基づく。parallel パッケージには mclapply とクラスタが同梱されている。並列には起動コストがかかるため、タスクは十分に大きい必要がある。
mclapply で並列化
mclapply は parallel の並列版 lapply で、fork で実装されている。Unix 系のみで利用可能 (Windows ではクラスタが必要)。
クラスタ並列
makeCluster でプロセスクラスタを作り、parLapply で並列に適用する。Windows でも対応している。使用後は stopCluster で解放する。
foreach で並列化
foreach はループで結果を集め、%dopar% で並列実行する (doParallel が必要)。%do% は逐次版である。
future で非同期
future パッケージは並列処理を「未来の値」として抽象化する。future() で非同期タスクを開始し、value() で結果を取得する。plan で戦略を選択する。
共有状態
並列 worker はメモリを共有せず、それぞれが環境をコピーする。ファイル書き込みは並列競合を防ぎ、結果は return で集める。
乱数シード
並列時は乱数を worker ごとに独立したシードで管理する必要がある。set.seed をグローバルで設定し、clusterSetRNGStream や future.seed で再現性を担保する。
並列性能
並列の効果はタスク粒度、コア数、通信オーバーヘッドに左右される。先に逐次のボトルネックを profile し、最も大きなブロックを並列化する。
15.ネットワークリクエスト
ダウンロード、httr2 / httr でのリクエスト、JSON API、URL 処理、Web スクレイピング。
ファイルダウンロード
download.file でファイルをダウンロードする。mode でバイナリを指定する。R.utils はレジュームをサポートする。低速回線では timeout を設定できる。
httr2 でリクエスト
httr2 は新世代の HTTP クライアントである。req_perform で実行し、resp_body_json で解析する。パイプ形式でリクエストを構築する。
GETリクエスト
GETでリソースを取得する。baseのreadLinesでテキストを取得できる;httrのGETとcontentで解析する。queryパラメータはURLに含める。
POSTリクエスト
POSTでデータを送信する。bodyにはJSONまたはフォームを渡す。httrのPOSTとhttr2のreq_body_jsonの2つのスタイルがある。
JSON API
JSON APIを呼び出す:リクエストとjsonliteで解析する。結果は入れ子リストになることが多く、flattenでデータフレームに変換する。ページネーションとエラー処理も対応する。
URL処理
parse_urlでURLの構成要素を分解し、URLencodeでエンコードする。URLdecodeで復号する。baseに組み込まれた処理。
ウェブスクレイピング
rvestでHTMLを解析する。html_elementsでノードを選択し、html_textでテキストを取得する。robotsと頻度制限を遵守する。
TCPソケット
socketConnectionでTCP接続を確立し、文字列を読み書きする。シンプルなプロトコルや社内サービスに適している。
16.日付と時刻
Sys.Date / POSIXct、フォーマット、lubridateとタイムゾーン。
現在時刻
Sys.Dateは今日の日付、Sys.timeは現在の日付時刻を返す。date()は現在の時刻文字列を返す。
日付の基本
Dateクラスは日付型である。as.Dateで文字列を変換し、日数を加算・減算する。unclassで日数の数値を確認できる。
POSIXct
POSIXctは秒単位のタイムスタンプを保持し、POSIXltはコンポーネントに分解する。as.POSIXctは文字列を解析し、タイムゾーンを処理する。
フォーマット
strftime / formatはプレースホルダで出力する。%Yは年、%mは月、%dは日、%Hは時、%Mは分、%Sは秒。
lubridateの概要
lubridateは使いやすい日付関数を提供する:ymd / ymd_hmsで解析し、year / monthでコンポーネントを取得し、インターバルの加算・減算を行う。
日付のシーケンス
seqで日付シーケンスを生成する:byは日 / 月 / 年を指定する。任意のインターバルの営業日にはseq.Dateを使う。
時間差
日付同士を減算するとdifftimeが得られる。unitsで単位を指定する。as.numericで数値を取得する。所要時間の統計に使える。
タイムゾーン
tz引数でタイムゾーンを指定する。Sys.timezoneで現在のタイムゾーンを取得する。OlsonNamesは利用可能なタイムゾーンを列挙する。タイムゾーンをまたいだ時刻を比較する。
17.プロセスと環境
システムコマンドの実行、環境変数、コマンドライン引数、プラットフォーム情報、パスについて。
コマンドの実行
systemはシステムコマンドを実行し終了コードを返す。system2は引数渡しがより安全である。出力をキャプチャするにはcapture.outputまたはinternを使う。
環境変数
Sys.getenvで読み込み、Sys.setenvで書き込む。Sys.unsetenvで削除する。PATHやR関連の変数がよく使われる。
コマンドライン引数
commandArgsはスクリプトの引数を取得する。trailingOnlyでR自身の引数を除外する。解析にはoptparseまたはbaseで手書きする。
終了ステータス
quitでRを終了する。q('no')はワークスペースを保存しない。エラー終了にはquit(status = 1)を使い、スクリプトで判定する。
プラットフォーム情報
R.versionでバージョン、Sys.infoでシステム情報、.Platformでプラットフォームの詳細を取得する。パスの区切りなどクロスプラットフォーム処理もある。
パス管理
file.pathでパスを連結し、dirname / basenameで分解し、normalizePathで絶対パスに正規化する。file.existsで存在を判定する。
一時停止
Sys.sleepで指定した秒数だけ一時停止する。レート制限や外部リソースの準備待ちに使える。単位は秒である。
Rscriptスクリプト
Rscriptは非インタラクティブな実行入口であり、スケジュールタスクやバッチ処理に適している。スクリプトの先頭にはshebangを書ける。
18.正規表現
grep / grepl、gsubでの置換、regexprでの位置特定、stringrとよく使われるパターン。
grepとgrepl
grepは一致したインデックスを返し、greplは論理ベクトルを返す。ignore.caseで大文字小文字を区別しない。valueで一致した値を返す。
gsubでの置換
gsubは一致した箇所をすべて置換し、subは最初の1つだけ置換する。\\1はキャプチャグループを参照する。perl=TRUEで拡張構文を有効化する。
regexprでの位置特定
regexprは最初の一致位置と長さを返し、gregexprはすべて返す。regmatchesで一致したテキストを抽出する。
構文の基礎
基本的な正規表現のメタ文字:^は先頭、$は末尾、.は任意の1文字、文字クラスは[]、グループは()、量指定子は* + ? {}、エスケープは\\。
よく使われるパターン
よく使われるパターンの早引き:メール、電話番号、日付、空白の除去、数字の抽出。要件に応じて微調整する。
stringrの一致
stringrは正規表現の構文は同じだがインターフェースが統一されている。str_detect / str_extract / str_matchおよび_allバージョンを提供する。
stringrでの置換
str_replace / str_replace_allで置換する。regexpはfixed / perlを指定できる。str_removeで一致部分を削除する。
フラグと拡張
perl=TRUEでPCRE拡張を有効化する:先読み、名前付きグループなど。fixed=TRUEはリテラル一致。ignore.caseも大文字小文字を無視する。
19.パッケージ管理とビルド
CRANからのインストール、renvによる依存関係管理、パッケージ構造、R CMD、testthat、roxygenについて。
パッケージのインストール
install.packagesはCRANからインストールする。update.packagesは更新する。libraryは読み込む。開発版にはdevtools / remotesを使う。
CRANとリポジトリ
CRANは公式のパッケージリポジトリである。reposでミラーを指定する。available.packagesはインストール可能なパッケージを列挙する。CRANのポリシーが公開を規定する。
renvによる依存関係管理
renvはプロジェクトの依存バージョンを固定し、Pythonのvenvに類似する。renv::initで初期化し、snapshot / restoreでロックファイルを同期する。
パッケージの構造
Rパッケージの標準構造:DESCRIPTION、R/、man/、tests/、NAMESPACE。R/にソースコード、man/にドキュメントを配置する。
R CMDコマンド
R CMD系コマンドでパッケージをビルド/検査する:buildはパッケージ化、checkは検査、INSTALLはインストール。公開前には必ずcheckを通す。
testthatによるテスト
testthatは主流のテストフレームワークである。expect_equalなどのアサーション、test_thatでテストケースをまとめる。usethisはテストファイルを生成する。
フォーマットと検査
stylerはコードスタイルを統一し、lintrは静的検査を行う。RStudio Addinsやpre-commitと組み合わせて整然と保つ。
roxygenドキュメント
roxygen2はコメントから.Rdドキュメントを生成する。#'で始まり、@param / @return / @exportタグを使う。関数のドキュメントはソースコードと同じ場所に置かれる。
セッションの再現
sessionInfoはバージョンと依存関係を記録し、再現性を保証する。renv.lockで依存関係を固定する。Rのバージョンも記録する。
このチートシートについて
このページはR 4.4の自己完結型のクイックリファレンスマニュアルであり、実際のデータ分析で最もよく使われるbase Rとtidyverseの約80%のシーンをカバーする。内容はモダンな慣用法に偏っている:ネイティブパイプライン `|>`、匿名関数 `\(x)` の短縮形、`stringsAsFactors = FALSE` を指定した`data.frame`、ベクトル化された`ifelse`、型付きの`purrr::map_*`による集合操作、そしてR独特のコピーオンライト(copy-on-modify)と環境の参照セマンティクス。権威あるリファレンスは公式のRマニュアルとR for Data Scienceを参照のこと。 19の章はそれぞれ一つのテーマに焦点を当てている——最初のプログラム、変数と型から、applyファミリー、S3/R6オブジェクト指向、並列処理、ネットワークまで。各節は8〜9個のサンプル付きサブセクション(各5〜20行)に分かれ、合計約160のトピックがある。コードスニペットは意図的に短く自己説明的であり、コピーしてそのままRやRStudioに貼り付けて実行できる。 すべての処理はブラウザ内で行われる——アップロードも追跡もない。このページはGuruToolkitの無料開発者ツールセットの一部である;コードスニペットは自由に利用でき、いかなる保証もない。
バージョン 2.1.0