「関数の解説」の編集履歴(バックアップ)一覧はこちら

関数の解説」(2008/08/16 (土) 01:50:28) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

#contents() *基本的な操作、関数 **パッケージの読み込み Rはそのままの状態でも多くの関数が使えますが、パッケージと呼ばれるものを読み込むと使える関数がさらに多くなります。パッケージと言うのは関数が詰まった辞書みたいなものだと思ってもらえばいいですが、中にはウィンドウが開いて特殊な操作ができるようになるようなものまであります。また、起動時に関数が使えるのも起動時に自動的に読み込まれるパッケージがいくつかあるためです。 パッケージの読み込みはlibrary関数により行います。例えば基本パッケージ(追加ダウンロードの必要が無い)の一つであるMASSパッケージ(きれいなヒストグラムを描くtruehist関数などが含まれます)を読み込むのであれば、 library(MASS) です。コマンド後に何か反応があるわけでもなく、すぐにそのパッケージに含まれる関数が使用可能となります。なお、読み込んだ状態は記憶されないため、新しく起動するたびに読み込む必要があります。 **ベクトルの生成 ***c c関数は引数として与えられた値を合成してベクトルにします。引数としては実数、複素数、論理値、文字列が取れます。文字列の場合はダブルクオーテーションでくくります。複数の型のベクトルを混在させた場合の優先順位は、論理値<実数<複素数<文字列で、高位のものに合わせて型が変換されます。論理値は実数または複素数と混在させたときはTRUEが1、FALSEが0として解釈され、文字列と混在させたときは"TRUE","FALSE"という文字列として認識されます。 > c(1, 2, 3) [1] 1 2 3 > c(1+2i, 3+4i, 5+6i) #複素数は「実部+虚部i」の形で指定 [1] 1+2i 3+4i 5+6i > c(T, F, TRUE, FALSE) #TとTRUE、FとFALSEは同じ意味だが、TとFは代入可能オブジェクト [1] TRUE FALSE TRUE FALSE > c("cat", "dog", "panda") #文字列は""でくくる [1] "cat" "dog" "panda" > c(T, F, 1) [1] 1 0 1 #TRUEは1、FALSEは0の意味 > c(T, 1, 2+3i) [1] 1+0i 1+0i 2+3i #実数より複素数が優先 > c(T, 2, 3+4i, "cat") [1] "TRUE" "2" "3+4i" "cat" #文字列が最優先 ---- ***: :関数は記号を挟んで左の数値から右の数値まで公差が1の等差数列ベクトルを生成します。実例を見たほうが分かりやすいでしょう。 > 1:10 [1] 1 2 3 4 5 6 7 8 9 10 #右の方が大きければ1ずつ増える > 10:1 [1] 10 9 8 7 6 5 4 3 2 1 #右の方が小さければ1ずつ減る > 1.1:10.1 [1] 1.1 2.1 3.1 4.1 5.1 6.1 7.1 8.1 9.1 10.1 > 1.1:10.5 [1] 1.1 2.1 3.1 4.1 5.1 6.1 7.1 8.1 9.1 10.1 #右の数値の小数点以下は無視 > 1.1:1.23 [1] 1.1 #長さ1のベクトルも生成可 ---- ***rep rep関数は第一引数に与えられたベクトルを第二引数に与えられた数値の回数だけ繰り返したベクトルを生成します。第二引数に1つの値を与えた場合は第一引数のベクトルがその回数だけ繰り返されますが、ベクトルとして第一引数のベクトル要素と同じ数だけの値を与えた場合は、第一引数ベクトルの各要素が対応する第二引数ベクトルの数値分だけ繰り返されます。 > rep(1, 10) [1] 1 1 1 1 1 1 1 1 1 1 > rep(1:3, 3) [1] 1 2 3 1 2 3 1 2 3 > rep(c("cat","dog"), c(3,4)) [1] "cat" "cat" "cat" "dog" "dog" "dog" "dog" ---- ***numeric, complex, logical, character これらの関数は引数で指定された数値分の長さの空の(ゼロの)ベクトルを作ります。 > numeric(5) [1] 0 0 0 0 0 > complex(5) [1] 0+0i 0+0i 0+0i 0+0i 0+0i > logical(5) [1] FALSE FALSE FALSE FALSE FALSE > character(5) [1] "" "" "" "" "" ---- **データフレームの生成 ***data.flame 引数として与えられたベクトルを合成してデータフレームとします。引数を与えるときに「名前=ベクトル」とすることで列名を指定できます。 > x <- 1:3 > y <- c(T,T,F) > z <- c("rat","mouse","rabbit") > data.frame(x,y,z) x y z 1 1 TRUE rat 2 2 TRUE mouse 3 3 FALSE rabbit > data.frame(no=x,small=y,kind=z) no small kind 1 1 TRUE rat 2 2 TRUE mouse 3 3 FALSE rabbit ---- ***read.delim read.delim関数はスペース区切りのデータを読み込みます。Excelからデータをコピーする際に使用すると思います。Excelのデータをクリップボードへコピー(範囲を選択してCtlr+C)したのち、 > read.delim("clipboard") とするとExcel上の並びと同じデータフレームを作ります。列の名前は自動的に一番上のセルに入っているものが設定されます。 ---- **オブジェクトの操作 ***代入 > x <- 3 この操作でxというオブジェクトに3という数値が代入されます。また同時にxというオブジェクトが作成されます。次の操作でも代入ができますが、特に理由がなければ上記のやりかたにすべきでしょう。 > x = 3 > 3 -> x 代入元には数値のほか、ベクトルや行列、データフレームなども代入できます。また、計算結果も代入できるということをよく意識しておくといいでしょう。 > x <- 5-2 ---- ***参照 オブジェクトの参照はオブジェクト名をタイピングすることで行います。 > x <- 1:10 > x [1] 1 2 3 4 5 6 7 8 9 10 また、[]で添え字を指定することにより特定のベクトルのみを取り出せます。 > x[3] [1] 3 > x[-3] [1] 1 2 4 5 6 7 8 9 10 #マイナスの指定はその要素以外 > x[x>5] [1] 6 7 8 9 10 #条件式での指定も可能 > y <- 11:20 > x[y<17] #条件式は他のベクトルでも構わない。 [1] 1 2 3 4 5 6 #この場合、[y<17]を満たすyのベクトルと同じ位置のベクトルが取り出される。 オブジェクトがデータフレームである場合、「データフレーム名$列名」で特定の列をベクトルとして取り出せます。 > x <- 1:3 > y <- c(T,T,F) > z <- c("rat","mouse","rabbit") > a <- data.frame(x,y,z) > a$x [1] 1 2 3 > a$y [1] TRUE TRUE FALSE > a$z [1] rat mouse rabbit Levels: mouse rabbit rat ---- ***計算 ベクトルが代入されたオブジェクト同士の演算は、要素どうしの演算となります。 > x <- 1:10 > y <- 11:20 > x+y [1] 12 14 16 18 20 22 24 26 28 30 > x*y [1] 11 24 39 56 75 96 119 144 171 200 > x/y [1] 0.0909091 0.1666667 0.2307692 0.2857143 0.3333333 0.3750000 0.4117647 [8] 0.4444444 0.4736842 0.5000000 ---- *グラフの描画 *数値計算 ***gamma, factorial, lgamma, lfactorial 階乗の計算はfactorial関数で行えます。 > factorial(3) [1] 6 これはgamma関数に一つ数値を増やした引数を与えて計算しています。 > gamma(4) [1] 6 $$\Gamma$$(ガンマ)関数というのは階乗の範囲を自然数から複素数へ拡張したものです(ただしRで計算する場合は範囲は実数に限られるようです)。要するに1.4!だとか、5.3!だとか、-0.4!だとかいう値が計算できるわけです。 > factorial(1.4) [1] 1.242169 > factorial(5.3) [1] 201.8133 > factorial(-0.4) [1] 1.489192 $$\Gamma$$関数と階乗の間には自然数の範囲で次の関係があります。 $$n! = \Gamma(n+1)$$ 階乗というものは値が大きくなるに従い値が爆発的に増加します(びっくりするくらい増えるので!を使ったという話もあります)。そのためRでは170!程度が表示の限界です。そこで、計算結果の対数を計算するlgamma関数lfactorial関数が用意されています。この関数を使えばかなり値の大きい階乗、$$\Gamma$$関数でも計算が可能です。 > lfactorial(100000000) [1] 1742068085 ---- *統計処理
#contents() *基本的な操作、関数 **パッケージの読み込み Rはそのままの状態でも多くの関数が使えますが、パッケージと呼ばれるものを読み込むと使える関数がさらに多くなります。パッケージと言うのは関数が詰まった辞書みたいなものだと思ってもらえばいいですが、中にはウィンドウが開いて特殊な操作ができるようになるようなものまであります。また、起動時に関数が使えるのも起動時に自動的に読み込まれるパッケージがいくつかあるためです。 パッケージの読み込みはlibrary関数により行います。例えば基本パッケージ(追加ダウンロードの必要が無い)の一つであるMASSパッケージ(きれいなヒストグラムを描くtruehist関数などが含まれます)を読み込むのであれば、 library(MASS) です。コマンド後に何か反応があるわけでもなく、すぐにそのパッケージに含まれる関数が使用可能となります。なお、読み込んだ状態は記憶されないため、新しく起動するたびに読み込む必要があります。 **ベクトルの生成 ***c c関数は引数として与えられた値を合成してベクトルにします。引数としては実数、複素数、論理値、文字列が取れます。文字列の場合はダブルクオーテーションでくくります。複数の型のベクトルを混在させた場合の優先順位は、論理値<実数<複素数<文字列で、高位のものに合わせて型が変換されます。論理値は実数または複素数と混在させたときはTRUEが1、FALSEが0として解釈され、文字列と混在させたときは"TRUE","FALSE"という文字列として認識されます。 > c(1, 2, 3) [1] 1 2 3 > c(1+2i, 3+4i, 5+6i) #複素数は「実部+虚部i」の形で指定 [1] 1+2i 3+4i 5+6i > c(T, F, TRUE, FALSE) #TとTRUE、FとFALSEは同じ意味だが、TとFは代入可能オブジェクト [1] TRUE FALSE TRUE FALSE > c("cat", "dog", "panda") #文字列は""でくくる [1] "cat" "dog" "panda" > c(T, F, 1) [1] 1 0 1 #TRUEは1、FALSEは0の意味 > c(T, 1, 2+3i) [1] 1+0i 1+0i 2+3i #実数より複素数が優先 > c(T, 2, 3+4i, "cat") [1] "TRUE" "2" "3+4i" "cat" #文字列が最優先 ---- ***: :関数は記号を挟んで左の数値から右の数値まで公差が1の等差数列ベクトルを生成します。実例を見たほうが分かりやすいでしょう。 > 1:10 [1] 1 2 3 4 5 6 7 8 9 10 #右の方が大きければ1ずつ増える > 10:1 [1] 10 9 8 7 6 5 4 3 2 1 #右の方が小さければ1ずつ減る > 1.1:10.1 [1] 1.1 2.1 3.1 4.1 5.1 6.1 7.1 8.1 9.1 10.1 > 1.1:10.5 [1] 1.1 2.1 3.1 4.1 5.1 6.1 7.1 8.1 9.1 10.1 #右の数値の小数点以下は無視 > 1.1:1.23 [1] 1.1 #長さ1のベクトルも生成可 ---- ***rep rep関数は第一引数に与えられたベクトルを第二引数に与えられた数値の回数だけ繰り返したベクトルを生成します。第二引数に1つの値を与えた場合は第一引数のベクトルがその回数だけ繰り返されますが、ベクトルとして第一引数のベクトル要素と同じ数だけの値を与えた場合は、第一引数ベクトルの各要素が対応する第二引数ベクトルの数値分だけ繰り返されます。 > rep(1, 10) [1] 1 1 1 1 1 1 1 1 1 1 > rep(1:3, 3) [1] 1 2 3 1 2 3 1 2 3 > rep(c("cat","dog"), c(3,4)) [1] "cat" "cat" "cat" "dog" "dog" "dog" "dog" ---- ***numeric, complex, logical, character これらの関数は引数で指定された数値分の長さの空の(ゼロの)ベクトルを作ります。 > numeric(5) [1] 0 0 0 0 0 > complex(5) [1] 0+0i 0+0i 0+0i 0+0i 0+0i > logical(5) [1] FALSE FALSE FALSE FALSE FALSE > character(5) [1] "" "" "" "" "" ---- **データフレームの生成 ***data.flame 引数として与えられたベクトルを合成してデータフレームとします。引数を与えるときに「名前=ベクトル」とすることで列名を指定できます。 > x <- 1:3 > y <- c(T,T,F) > z <- c("rat","mouse","rabbit") > data.frame(x,y,z) x y z 1 1 TRUE rat 2 2 TRUE mouse 3 3 FALSE rabbit > data.frame(no=x,small=y,kind=z) no small kind 1 1 TRUE rat 2 2 TRUE mouse 3 3 FALSE rabbit ---- ***read.delim read.delim関数はスペース区切りのデータを読み込みます。Excelからデータをコピーする際に使用すると思います。Excelのデータをクリップボードへコピー(範囲を選択してCtlr+C)したのち、 > read.delim("clipboard") とするとExcel上の並びと同じデータフレームを作ります。列の名前は自動的に一番上のセルに入っているものが設定されます。 ---- **オブジェクトの操作 ***代入 > x <- 3 この操作でxというオブジェクトに3という数値が代入されます。また同時にxというオブジェクトが作成されます。次の操作でも代入ができますが、特に理由がなければ上記のやりかたにすべきでしょう。 > x = 3 > 3 -> x 代入元には数値のほか、ベクトルや行列、データフレームなども代入できます。また、計算結果も代入できるということをよく意識しておくといいでしょう。 > x <- 5-2 ---- ***参照 オブジェクトの参照はオブジェクト名をタイピングすることで行います。 > x <- 1:10 > x [1] 1 2 3 4 5 6 7 8 9 10 また、[]で添え字を指定することにより特定のベクトルのみを取り出せます。 > x[3] [1] 3 > x[-3] [1] 1 2 4 5 6 7 8 9 10 #マイナスの指定はその要素以外 > x[x>5] [1] 6 7 8 9 10 #条件式での指定も可能 > y <- 11:20 > x[y<17] #条件式は他のベクトルでも構わない。 [1] 1 2 3 4 5 6 #この場合、[y<17]を満たすyのベクトルと同じ位置のベクトルが取り出される。 オブジェクトがデータフレームである場合、「データフレーム名$列名」で特定の列をベクトルとして取り出せます。 > x <- 1:3 > y <- c(T,T,F) > z <- c("rat","mouse","rabbit") > a <- data.frame(x,y,z) > a$x [1] 1 2 3 > a$y [1] TRUE TRUE FALSE > a$z [1] rat mouse rabbit Levels: mouse rabbit rat ---- ***計算 ベクトルが代入されたオブジェクト同士の演算は、要素どうしの演算となります。 > x <- 1:10 > y <- 11:20 > x+y [1] 12 14 16 18 20 22 24 26 28 30 > x*y [1] 11 24 39 56 75 96 119 144 171 200 > x/y [1] 0.0909091 0.1666667 0.2307692 0.2857143 0.3333333 0.3750000 0.4117647 [8] 0.4444444 0.4736842 0.5000000 ---- *グラフの描画 *数値計算 **一般 ***gamma, factorial, lgamma, lfactorial 階乗の計算はfactorial関数で行えます。 > factorial(3) [1] 6 これはgamma関数に一つ数値を増やした引数を与えて計算しています。 > gamma(4) [1] 6 $$\Gamma$$(ガンマ)関数というのは階乗の範囲を自然数から複素数へ拡張したものです(ただしRで計算する場合は範囲は実数に限られるようです)。要するに1.4!だとか、5.3!だとか、-0.4!だとかいう値が計算できるわけです。 > factorial(1.4) [1] 1.242169 > factorial(5.3) [1] 201.8133 > factorial(-0.4) [1] 1.489192 $$\Gamma$$関数と階乗の間には自然数の範囲で次の関係があります。 $$n! = \Gamma(n+1)$$ 階乗というものは値が大きくなるに従い値が爆発的に増加します(びっくりするくらい増えるので!を使ったという話もあります)。そのためRでは170!程度が表示の限界です。そこで、計算結果の対数を計算するlgamma関数lfactorial関数が用意されています。この関数を使えばかなり値の大きい階乗、$$\Gamma$$関数でも計算が可能です。 > lfactorial(100000000) [1] 1742068085 ---- **統計 ***mean mean関数は与えられたベクトルの要素の平均値を計算します。 > x <- 1:10 > mean(x) [1] 5.5 ---- ***var, sd var関数は与えられたベクトルの不偏分散を返し、sd関数はその平方根、つまり標準偏差を返します。 > x <- 1:10 > var(x) [1] 9.166667 > sd(x) [1] 3.027650 *統計処理

表示オプション

横に並べて表示:
変化行の前後のみ表示: