R の紹介

最終更新日:2024-09-08 | ページの編集

概要

質問

  • R の最初のコマンド

目的

  • R に関連する次の用語を定義します: オブジェクト、代入、呼び出し、関数、引数、オプション。
  • R のオブジェクトに値を割り当てます。
  • オブジェクトに _名前を付ける_方法を学ぶ
  • コメントを使用してスクリプトに情報を与えます。
  • R で単純な算術演算を解きます。
  • 関数を呼び出し、引数を使用してデフォルトのオプションを変更します。
  • ベクトルの内容を検査し、その内容を操作します。
  • ベクトルから値をサブセット化して抽出します。
  • データが欠落しているベクトルを解析します。

This episode is based on the Data Carpentries’s Data Analysis and Visualisation in R for Ecologists lesson.

R でオブジェクトを作成する


コンソールに math と入力するだけで、R から出力を取得できます。

R

3 + 5

出力

[1] 8

R

12 / 7

出力

[1] 1.714286

ただし、便利で興味深いことを行うには、_値_を オブジェクト に割り当てる必要があります。 オブジェクトを作成するには、オブジェクトに名前を付け、その後に 代入演算子 <- と、それに付けたい値を付ける必要があります。

R

weight_kg <- 55

<- は代入演算子です。 右側の値を左側の 個のオブジェクトに割り当てます。 したがって、「x <- 3」を実行すると、「x」の値は 3 になります。 矢印は 3 x に入る と読むことができます。 歴史的 理由により、代入に = を使用することもできますが、 のコンテキストで使用できるわけではありません。 構文に わずかな違い](https://blog.revolutionanalytics.com/2008/12/use-equals-or-arrow-for-assignment.html) があるため、常に < を使用することをお勧めします。 - 割り当て用。

RStudio では、 オプション を入力しながら、 Alt + - を入力すると ( - キーと同時に Alt を押すと)、PC で 1 回のキーストロークで <- が書き込まれます。 + - ( オプション - キーと同時に押す) は、Mac でも と同じことを行います。

変数に名前を付ける

オブジェクトには、「x」、「current_temperature」、または「subject_id」などの任意 名前を付けることができます。 オブジェクト名は明示的で、長 ないようにしたいと考えています。 数字で始めることはできません (「2x」は無効ですが、「x2」 は有効です)。 R では大文字と小文字が区別されます (たとえば、weight_kg は の Weight_kg とは異なります)。 R の基本的な関数の名前であるため、使用でき 名前が かあります (例: ifelsefor。2 こちらを参照)完全なリストについては、/R-manual/R-devel/library/base/html/Reserved.html) )。 一般に、たとえ許可されていても、他の関数名 (例: cTmeandatadfweights) は使用しないことが です。 疑問がある場合は、ヘルプを参照して、その名前がすでに で使用されているかどうかを確認してください。 また my.dataset のように、オブジェクト名内にドット (.) を使用しないことも最善です。 R には歴史的な理由から名前にドットが含まれる関数が多数あります が、R (メソッド) や他のプログラミング言語ではドットが特別な意味を持っているため、ドットは避けるのが最善です 。 オブジェクト名には名詞を使用し、関数名には動詞 を使用することもお勧めします。 のスタイル (スペースを入れる場所、オブジェクトの名前など) に一貫性を持たせることが重要です。 コーディング スタイルを使用すると、 の自分や共同作業者にとって、コードがより明確に読みやすくなります。 R では、人気のあるスタイル ガイド には、Google のtidyverse の スタイル、およびBioconductor スタイル ガイド。 Tidyverse は非常に包括的であり、最初は では圧倒されるように思えるかもしれません。 lintr パッケージを にインストールすると、コードのスタイルの問題が自動的にチェックされます。

オブジェクトと変数: 「R」で「オブジェクト」として知られているものは、他の多くのプログラミング言語では「変数」として知られて ます。 に応じて、「オブジェクト」と「変数」は に異なる意味を持つ可能性があります。 ただし、このレッスンでは、2 つの単語は 的に使用されます。 詳細については、 ここを参照してください。

オブジェクトに値を割り当てるとき、R は何も出力しません。 かっこを使用するか 名を入力することで、 に値を強制的に出力させることができます。

R

weight_kg <- 55    # 何も出力しません
(weight_kg <- 55)  #  しかし、呼び出しを括弧で囲むと `weight_kg` の値が出力され、

出力

[1] 55

R

weight_kg          # オブジェクトの名前を入力しても同様に出力されます

出力

[1] 55

R のメモリに「weight_kg」があるので、それを使って算術演算を行うことができます。 、この重量をポンドに変換したい場合があります (ポンドでの重量は kg での重量の 2.2 倍です)。

R

2.2 * weight_kg

出力

[1] 121

オブジェクトに新しい値を割り当てることで、オブジェクトの値を変更することもできます。

R

weight_kg <- 57.5
2.2 * weight_kg

出力

[1] 126.5

これは、 つのオブジェクトに値を割り当てても、他のオブジェクトの値は変更されないことを意味します。たとえば、動物の体重をポンド単位で新しい オブジェクト weight_lb に保存してみましょう。

R

weight_lb <- 2.2 * weight_kg

次に「weight_kg」を 100 に変更します。

R

weight_kg <- 100

チャレンジ:

オブジェクト「weight_lb」の現在の内容は何だと思いますか? 126.5 それとも 220?

コメント


のコメント文字は # です。0 スクリプトの # の右側にあるものはすべて R によって無視されます。スクリプトにメモ 説明を残すと便利です。

RStudio では、段落のコメントまたはコメント解除が簡単に行えます。 コメントしたい行を選択した後、 キーボード Ctrl + Shift + Cを同時に押します。 の場合、1 行だけをコメントアウトしたい場合は、その行の任意 位置にカーソルを置きます (つまり、行全体を選択する必要はありません)。その後 Ctrl + Shift + C押します。

チャレンジ

次の各ステートメントの後の値は何ですか?

R

mass <- 47.5            # 質量?
age  <- 122             # 年齢?
mass <- mass * 2.0      # 質量?
age  <- age - 20        # 年齢?
mass_index <- mass/age  # 質量指数?

関数とその引数


関数は、操作の割り当て を含む、より複雑なコマンド セットを自動化する「定型スクリプト」です。 多くの関数は事前定義されているか、R パッケージ をインポートすることで 可能になります (詳細は後ほど)。 関数 は通常、arguments と呼ばれる 1 つ以上の入力を取得します。 関数は多くの場合 (常に ではありませんが) を返します。 典型的な例は関数 sqrt() です。 入力 (引数) は数値でなければならず、戻り値 (実際には 出力) はその数値の平方根です。 関数の実行 (「実行中」) は関数の 呼び出し と呼ばれます。 関数呼び出しの例は次のとおりです。

R

b <- sqrt(a)

ここでは、a の値が sqrt() 関数に与えられ、sqrt() 関数は 平方根を計算し、その値をオブジェクト ` に代入して返します。 この関数は引数を 1 つだけ取るため、非常に単純です。

関数の戻り値「値」は数値 (sqrt() のような) である必要はなく、 である必要もありません。また、単一の項目である必要もありません。一連のものや 、さらにはデータセットでも構いません。 データ ファイルを R に読み込むと、それがわかります。

引数には、数値やファイル名だけでなく、他の も含めることができます。 各引数の正確な意味は関数ごとに異なるため、ドキュメントで調べて にする必要があります (下記を参照)。 一部の関数は引数を取ります はユーザーによって指定されるか、指定されなかった場合は デフォルト 値を取ります: これらは オプション と呼ばれます。 オプションは通常、「不正な値」を無視するかどうか、プロットでどのような記号を使用 かなど、 関数の動作方法を変更するために使用されます。 ただし、特定の値が必要な場合は、デフォルトの代わりに使用される値 を選択して指定できます。

複数の引数を取ることができる関数 round() を試してみましょう。

R

round(3.14159)

出力

[1] 3

ここでは、1 つの引数 3.14159 を指定して round() を呼び出しましたが、 が値 3 を返しました。 これは、デフォルトでは最も近い 整数に丸められるためです。 さらに多くの桁が必要な場合は、「round」関数に関する 情報を取得することでその方法がわかります。 args(round) を使用するか、?round を使用して 関数のヘルプを参照することができます。

R

args(round)

出力

function (x, digits = 0, ...)
NULL

R

?round

別の桁数が必要な場合は、digits=2 または必要な桁数を入力 ことがわかります。

R

round(3.14159, digits = 2)

出力

[1] 3.14

定義されているのとまったく同じ順序で引数を指定する場合は に名前を付ける必要はありません。

R

round(3.14159, 2)

出力

[1] 3.14

引数に名前を付けた場合は、その順序を入れ替えることができます。

R

round(digits = 2, x = 3.14159)

出力

[1] 3.14

関数呼び出しの最初にオプションではない引数 ( 四捨五入する数値など) を置き、すべてのオプションの 引数の名前を指定することをお勧めします。 そうしないと、コードを読む人が、 をしているのかを理解するために、なじみのない引数を持つ関数の定義を調べなければなら 可能性があります。 引数の名前を指定することで、関数インターフェースの将来の変更 (既存の引数の間に 引数が追加される可能性) から することもできます。

ベクトルとデータ型


ベクトルは R で最も一般的かつ基本的なデータ型であり、ほぼ R の主力である です。ベクトルは、 数字や文字などの一連の値で構成されます。 の c() 関数を使用して、一連の値をベクトルに割り当てることができます。 たとえば、動物の体重のベクトルを作成し、それを新しいオブジェクト weight_g に に割り当てることができます。

R

weight_g <- c(50, 60, 65, 82)
weight_g

出力

[1] 50 60 65 82

ベクトルには文字も含めることができます。

R

molecules <- c("dna", "rna", "protein")
molecules

出力

[1] "dna"     "rna"     "protein"

ここでは「dna」や「rna」などの引用符が重要です。 引用符 がないと、R は dnarna、および protein と呼ばれるオブジェクトがあると想定します。 これらのオブジェクトは R のメモリに存在しないため、エラー メッセージが されます。

ベクトルの内容を検査できる関数が多数あります。 length() は、特定のベクトルに含まれる要素の数を示します。

R

length(weight_g)

出力

[1] 4

R

length(molecules)

出力

[1] 3

ベクトルの重要な特徴は、すべての要素が タイプのデータであることです。 関数 class() は、オブジェクトのクラス ( 型の要素) を示します。

R

class(weight_g)

出力

[1] "numeric"

R

class(molecules)

出力

[1] "character"

関数 str() は、 オブジェクトとその要素の構造の概要を提供します。 これは、 て複雑なオブジェクトを扱う場合に便利な関数です。

R

str(weight_g)

出力

 num [1:4] 50 60 65 82

R

str(molecules)

出力

 chr [1:3] "dna" "rna" "protein"

c() 関数を使用して、ベクトルに他の要素を追加できます。

R

weight_g <- c(weight_g, 90) # ベクトルの最後に追加
weight_g <- c(30, weight_g) # ベクトルの先頭に追加
weight_g

出力

[1] 30 50 60 65 82 90

最初の行では、元のベクトル weight_g を取得し、その末尾に 値 90 を追加し、結果を weight_g に保存します。 次に、値 30 を先頭に追加し、結果を再び として weight_g に保存します。

これを何度も繰り返してベクトルを成長させたり、 データセットを組み立てたりすることができます。 これは、プログラムするときに、 または計算している結果を追加するのに役立つ場合があります。

アトミック ベクトルは最も単純な R データ型であり、単一型の線形 ベクトルです。 上では、R が使用する 6 つの主な アトミック ベクトル タイプのうち 2 つ、つまり "character""numeric" (または "double") を見てきました。 これらは、すべての R オブジェクト が構築される基本的な構成要素です。 他の 4 つの 原子ベクトル タイプは次のとおりです。

  • TRUE および FALSE の場合は "logical" (ブール データ型)
  • 整数の場合は "integer" (たとえば、2LL は R にそれが整数であることを示します)
  • "complex" は、実数と虚数の 部分を持つ複素数を表します (例: 1 + 4i)。これについて説明するのはこれですべてです。
  • ビットストリームの「raw」` (これ以上は説明しません)

typeof() 関数 を使用し、ベクトルを引数として入力することで、ベクトルの型をチェックできます。

ベクトルは、R が使用する多くの データ構造 の 1 つです。 その他 重要なものは、リスト (list)、行列 (matrix)、データ フレーム (data.frame)、因子 (factor)、および配列 (array) です。

チャレンジ:

アトミック ベクトルの型は、文字、数値 (または double)、整数、および論理型であることがわかりました。 しかし、これらのタイプを つのベクトルに混在させようとするとどうなるでしょうか?

R はそれらをすべて同じ型に暗黙的に変換します。

チャレンジ:

これらのそれぞれの例では何が起こるでしょうか? (ヒント: class() を使用してオブジェクトのデータ型を確認 、名前を入力して何が起こるかを確認します):

R

num_char <- c(1, 2, 3, "a")
num_logical <- c(1, 2, 3, TRUE, FALSE)
char_logical <- c("a", "b", "c", TRUE)
tricky <- c(1, 2, 3, "4")

R

class(num_char)

出力

[1] "character"

R

num_char

出力

[1] "1" "2" "3" "a"

R

class(num_logical)

出力

[1] "numeric"

R

num_logical

出力

[1] 1 2 3 1 0

R

class(char_logical)

出力

[1] "character"

R

char_logical

出力

[1] "a"    "b"    "c"    "TRUE"

R

class(tricky)

出力

[1] "character"

R

tricky

出力

[1] "1" "2" "3" "4"

チャレンジ:

なぜそれが起こると思いますか?

ベクトルのデータ型は 1 つだけです。 R は、 が情報を失わないという 共通分母 を見つけるために、このベクトルの内容を に変換 (強制) しようとします。

チャレンジ:

次の例では、combined_logical 内の "TRUE" (文字として) となる値はいくつありますか。

R

num_logical <- c(1, 2, 3, TRUE)
char_logical <- c("a", "b", "c", TRUE)
combined_logical <- c(num_logical, char_logical)

唯一。 過去のデータ型の記憶はなく、ベクトルが初めて評価されるときに強制 が発生します。 したがって、「num_logical」の「TRUE」 「combined_logical」で 「1」に変換される前に、「1」に変換されます。

R

combined_logical

出力

[1] "1"    "2"    "3"    "1"    "a"    "b"    "c"    "TRUE"

チャレンジ:

R では、オブジェクトをあるクラスから別のクラスに変換することを 強制* と呼びます。 これらの変換は階層 に従って行われ、一部の型が優先的に他の型に強制されます。 これらのデータ がどのように強制されるかの階層を表す図を描いてもらえます ?

論理 → 数値 → 文字 ← 論理

ベクトルのサブセット化


ベクトルから 1 つまたは複数の値を抽出したい場合は、角括弧内に 1 つまたは複数のインデックスを指定する必要が ます。 例えば:

R

molecules <- c("dna", "rna", "peptide", "protein")
molecules[2]

出力

[1] "rna"

R

molecules[c(3, 2)]

出力

[1] "peptide" "rna"    

インデックスを繰り返して、元のオブジェクトよりも要素 が多いオブジェクトを作成することもできます。

R

more_molecules <- molecules[c(1, 2, 3, 2, 1, 4)]
more_molecules

出力

[1] "dna"     "rna"     "peptide" "rna"     "dna"     "protein"

R インデックスは 1 から始まります。 Fortran、MATLAB、 Julia、R などのプログラミング言語は から数え始めます。これは人間が通常行うことだからです。 C ファミリの言語 (C++、Java、Perl、 、Python を含む) は 0 からカウントします。これは、コンピュータにとってその方が簡単なためです。

最後に、負のインデックスを使用して、指定された一部の要素を除くベクトル のすべての要素を取得することもできます。

R

分子 ## すべての分子

エラー

Error in eval(expr, envir, enclos): object '分子' not found

R

分子[-1] ## 最初の分子を除くすべての分子

エラー

Error in eval(expr, envir, enclos): object '分子' not found

R

分子[-c(1, 3)] ## 1 番目/3 番目の分子を除くすべての分子

エラー

Error in eval(expr, envir, enclos): object '分子' not found

R

分子[c(-1, -3)] # # 1番目/3番目を除くすべて

エラー

Error in eval(expr, envir, enclos): object '分子' not found

条件付きサブセット化


サブセット化のもう 1 つの一般的な方法は、論理ベクトルを使用することです。 TRUE は同じインデックスを持つ要素を選択し が、FALSE は選択しません。

R

weight_g <- c(21, 34, 39, 54, 55)
weight_g[c(TRUE, FALSE, TRUE, TRUE, FALSE)]

出力

[1] 21 39 54

通常、これらの論理ベクトルは手動で入力されるのではなく、他の関数または論理テストの 出力です。 たとえば、50 を超える値のみを選択したい場合は、 のようにします。

R

## will return logicals with TRUE for the indices that meet
## the condition
weight_g > 50

出力

[1] FALSE FALSE FALSE  TRUE  TRUE

R

## so we can use this to select only the values above 50
weight_g[weight_g > 50]

出力

[1] 54 55

& (両方の条件が true、 AND) または | (少なくとも 1 つの条件が true、OR) を使用して複数のテストを結合できます。

R

weight_g[weight_g < 30 | weight_g > 50]

出力

[1] 21 54 55

R

weight_g[weight_g >= 30 & weight_g == 21]

出力

numeric(0)

ここで、「<」は「より小さい」、「>」は「より大きい」、「>=」は 「以上」、「==」は「等しい」を表します。 2 つの等号 記号「==」は、左側と の数値が等しいかどうかをテストするものであり、(「<-」と同様に) 変数の代入を する単一の = 記号と混同しないでください。 。

一般的なタスクは、ベクトル内の特定の文字列を検索することです。
「or」演算子 | を使用して複数の値が等しいかどうかをテストすることもできますが、 これはすぐに面倒になります。 関数 %in% を使用すると、検索ベクトルの要素が見つかったかどうかを できます。

R

分子 <- c("dna", "rna", "タンパク質", "ペプチド")
分子[分子 == "rna" |分子 == "dna"] # rna と dna の両方を返します
分子 %in% c("rna", "dna", "代謝物", "ペプチド", "グリセロール")
分子[分子 %in% c("rna", " 「DNA」、「代謝物」、「ペプチド」、「グリセロール」)]

エラー

Error: <text>:4:21: unexpected INCOMPLETE_STRING
3: 分子 %in% c("rna", "dna", "代謝物", "ペプチド", "グリセロール")
4: 分子[分子 %in% c("rna", " 「DNA」、「代謝物」、「ペプチド」、「グリセロール」)]
                       ^

チャレンジ:

なぜ "four" > "five"TRUE を返すのか理解できますか?

R

"four" > "five"

出力

[1] TRUE

文字列で > または < を使用すると、R はそれらのアルファベット順を比較します。 ここで、"four""five" の後に来るので、それは * より大きい* です。

名前


ベクトルの各要素に名前を付けることができます。 より下のコード チャンクは、名前のない初期ベクトル、名前の設定方法、および 取得される様子を示しています。

R

x <- c(1, 5, 3, 5, 10)
names(x) ## 名前なし

出力

NULL

R

names(x) <- c("A", "B", "C", "D", " E")
名前(x) ## これで名前が決まりました

エラー

Error in 名前(x): could not find function "名前"

ベクトルに名前がある場合、 に加えて名前によって要素にアクセスすることができます。

R

x[c(1, 3)]

出力

A C
1 3 

R

x[c("A", "C")]

出力

A C
1 3 

データが欠落しています


R はデータセットを分析するように設計されているため、欠損データが であるという概念が含まれています (これは のプログラミング言語では一般的ではありません)。 欠損データはベクトルで「NA」として表されます。

数値の演算を行う場合、扱っているデータに欠損値が含まれている場合 ほとんどの関数は「NA」を返します。 この機能により、 データを処理し いるケースを見逃しにくくなります。 引数 na.rm = TRUE を追加すると、欠損値を無視して結果を として計算できます。

R

heights <- c(2, 4, 4, NA, 6)
mean(heights)

出力

[1] NA

R

max(heights)

出力

[1] NA

R

mean(heights, na.rm = TRUE)

出力

[1] 4

R

max(heights, na.rm = TRUE)

出力

[1] 6

データに欠損値が含まれている場合は、関数 is.na()na.omit()、および complete.cases() に ておくとよいでしょう。 例については、以下の を参照してください。

R

## 欠損値のない要素を抽出します。
heights[!is.na(heights)]

出力

[1] 2 4 4 6

R

## 不完全なケースを削除したオブジェクトを返します。
## 返されるオブジェクトは、タイプ `"numeric"` の原子ベクトルです。
## (または `"double"`)。
na.omit(heights)

出力

[1] 2 4 4 6
attr(,"na.action")
[1] 4
attr(,"class")
[1] "omit"

R

## 完全なケースである要素を抽出します。
## 返されるオブジェクトは、タイプ `"numeric"` の原子ベクトルです。
## (または `"double"`)。
の高さ[完全なケース(高さ)]

エラー

Error in eval(expr, envir, enclos): object 'の高さ' not found

チャレンジ:

  1. このインチ単位の高さのベクトルを使用して、NA を削除した新しいベクトルを作成します。

R

高さ <- c(63, 69, 60, 65, NA, 68, 61, 70, 61, 59, 64, 69, 63, 63, NA, 72, 65, 64, 70, 63, 65)
  1. 関数 median() を使用して、heights ベクトルの中央値を計算します。
  2. R を使用して、セット内の身長が 67 インチを超える人が何人いるかを計算します。

R

heights_no_na <- heights[!is.na(heights)]
## または
heights_no_na <- na.omit(heights)

R

median(heights, na.rm = TRUE)

出力

[1] 4

R

height_above_67 <- height_no_na[heights_no_na > 67]

エラー

Error in eval(expr, envir, enclos): object 'height_no_na' not found

R

長さ(heights_above_67)

エラー

Error in 長さ(heights_above_67): could not find function "長さ"

ベクトル {#sec:genvec}の生成


コンストラクター

異なるタイプのベクトルを生成する関数がいくつか存在します。 数値のベクトルを生成 には、numeric() コンストラクターを使用し、出力ベクトルの長さを パラメーターとして指定します。 値は 0 で初期化されます。

R

数値(3)

エラー

Error in 数値(3): could not find function "数値"

R

数値(10)

エラー

Error in 数値(10): could not find function "数値"

長さ 0 の数値ベクトルを要求すると、次のように が得られることに注意してください。

R

数値(0)

エラー

Error in 数値(0): could not find function "数値"

文字と論理に対しても同様のコンストラクターがあり、 character()logical() という名前が付けられます。

チャレンジ:

文字ベクトルと論理ベクトルのデフォルトは何ですか?

R

文字(2) ## 空の文字

エラー

Error in 文字(2): could not find function "文字"

R

論理的(2) ## FALSE

エラー

Error in 論理的(2): could not find function "論理的"

要素を複製する

rep 関数を使用すると、値を特定の回数 ( 回) 繰り返すことができます。 たとえば、長さ 5 の数値ベクトルを から値 -1 で開始したい場合は、次のようにすることができます。

R

担当者(-1, 5)

エラー

Error in 担当者(-1, 5): could not find function "担当者"

同様に、収集されるデータ に仮定を設定せずに、欠損値が入力されたベクトルを生成するには (多くの場合、 から始めるのが良い方法です):

R

担当者(NA, 5)

エラー

Error in 担当者(NA, 5): could not find function "担当者"

rep は、入力として任意の長さのベクトル (上記では長さ 1 のベクトル を使用しました) および任意のタイプを受け取ることができます。 たとえば、 値 1、2、3 を 5 回繰り返す場合は、次のようにします。

R

rep(c(1, 2, 3), 5)

出力

 [1] 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3

チャレンジ:

値 1、2、3 を 5 回繰り返したいのに、 1 を 5 つ、2 を 5 つ、3 を 5 つこの順序で取得した場合はどうなるでしょうか。 可能性は 2 つあります。ヘルプについては ?rep または ?sort を参照してください。

R

rep(c(1, 2, 3), each = 5)

出力

 [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3

R

sort(rep(c(1, 2, 3), 5))

出力

 [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3

シーケンスの生成

もう 1 つの非常に便利な関数は、 の数値シーケンスを生成する seq です。 たとえば、1 から 20 までの整数のシーケンスを 2 ずつ生成するには、次のコマンドを使用します。

R

seq(from = 1, to = 20, by = 2)

出力

 [1]  1  3  5  7  9 11 13 15 17 19

by のデフォルト値は 1 で、1 のステップで 1 つの値から別の値への シーケンスの生成が頻繁に使用されることを考えると、 というショートカットがあります。

R

seq(1, 5, 1)

出力

[1] 1 2 3 4 5

R

seq(1, 5) ## default by

出力

[1] 1 2 3 4 5

R

1:5

出力

[1] 1 2 3 4 5

最終長さが の 1 から 20 までの一連の数値を生成するには、次のコマンドを使用します。

R

seq(from = 1, to = 20, length.out = 3)

出力

[1]  1.0 10.5 20.0

ランダムなサンプルと順列

有用な関数の最後のグループは、ランダムな データを生成する関数です。 最初の sample は、 のベクトルのランダムな置換を生成します。 たとえば、口頭試験を行わない 人の生徒にランダムな順序を付けるには まず各生徒に 1 から 10 までの番号を割り当てます (たとえば、名前のアルファベット順に基づきます)。次に次のようにします。

R

sample(1:10)

出力

 [1]  9  4  7  1  2  5  3 10  6  8

さらなる引数がなければ、sample はベクトルのすべての 要素の順列を返します。 特定のサイズのランダムなサンプルが必要な場合、I はこの値を 2 番目の引数として設定します。 以下では、事前定義された letters ベクトルに含まれるアルファベットから 5 つのランダムな 文字をサンプリングします。

R

sample(letters, 5)

出力

[1] "s" "a" "u" "x" "j"

入力ベクトルよりも大きな出力が必要な場合、または一部の要素を複数回 できるようにしたい場合は、引数 replaceTRUE に設定する必要があります。

R

sample(1:5, 10, replace = TRUE)

出力

 [1] 2 1 5 5 1 1 5 5 2 2

チャレンジ:

上記の関数を試してみると、 サンプルは実際にランダムであり、同じ 順列が 2 回発生することはないことがわかるでしょう。 これらのランダムな描画を再現できるようにするには、ランダム サンプルを描画する前に set.seed() を使用 て乱数生成シードを手動で設定します。

近所の人と一緒にこの機能をテストしてください。 まず、「1:10」のランダムな 順列を 2 つ個別に描画し、 の異なる結果が得られることを観察します。

次に、たとえば set.seed(123) でシードを設定し、 ランダムな描画を繰り返します。 同じランダムな抽選が行われることに注目してください。

別のシードを設定して繰り返します。

さまざまな順列

R

sample(1:10)

出力

 [1]  9  1  4  3  6  2  5  8 10  7

R

sample(1:10)

出力

 [1]  4  9  7  6  1 10  8  3  2  5

シード 123 と同じ順列

R

set.seed(123)
sample(1:10)

出力

 [1]  3 10  2  8  6  9  1  7  5  4

R

set.seed(123)
sample(1:10)

出力

 [1]  3 10  2  8  6  9  1  7  5  4

違う種

R

set.seed(1)
sample(1:10)

出力

 [1]  9  4  7  1  2  5  3 10  6  8

R

set.seed(1)
sample(1:10)

出力

 [1]  9  4  7  1  2  5  3 10  6  8

正規分布からサンプルを抽出する

最後に説明する関数は rnorm で、正規分布からランダムな サンプルを抽出します。 平均 および 100、標準偏差 1 および 5 の 2 つの正規分布 (N(0, 1) および N(100, 5) と表記) を以下に示します。

Two normal distributions: *N(0, 1)* on the left and *N(100, 5)* on the right.
Two normal distributions: N(0, 1) on the left and N(100, 5) on the right.

3 つの引数「n」、「mean」、「sd」は、サンプル のサイズと、正規分布のパラメーター、つまり平均 とその標準偏差を定義します。 後者のデフォルトは 0 と 1 です。

R

rnorm(5)

出力

[1]  0.69641761  0.05351568 -1.31028350 -2.12306606 -0.20807859

R

rnorm(5, 2, 2)

出力

[1]  1.3744268 -0.1164714  2.8344472  1.3690969  3.6510983

R

rnorm(5, 100, 5)

出力

[1] 106.45636  96.87448  95.62427 100.71678 107.12595

スクリプトの書き方と のデータ構造の基本を学習したので、より大きなデータの操作を開始する準備が整い、データ フレームについて します。

まとめ

  • Rと対話する方法