サーチ…


名前付き関数

Rは関数でいっぱいですが、それは関数型プログラミング言語の後ですが、必要な正確な関数がBaseリソースには含まれていないことがあります。あなたはおそらく機能を含むパッケージインストールすることができますが、おそらくあなたの要件はあまりにも特定の事前に作られた機能は、法案に適合しない特定ですか?それから、自分で作るという選択肢が残っています。

関数は、非常に無意味であるという点で、非常に単純なものにすることができます。議論をする必要はありません。

one <- function() { 1 }
one()
[1] 1

two <- function() { 1 + 1 }
two()
[1] 2

中括弧{ }の間にあるものが適切な関数です。すべてを単一の行に収めることができれば、厳密には必要ではありませんが、物事を整理するのに便利です。

関数は非常に単純でありながら、非常に特殊なものにすることができます。この関数は、ベクトル(この例ではvec )を入力として受け取り、ベクトルの長さ(この場合は6)を持つ同じベクトルを各ベクトルの要素から差し引いて出力します。

vec <- 4:9
subtract.length <- function(x) { x - length(x) }
subtract.length(vec)
[1] -2 -1  0  1  2  3

length()自体はあらかじめ提供されている(すなわちBase )関数であることに注意してください。もちろん、以前に自作した関数を別の自己作成関数で使用したり、変数を割り当てたり、いくつかの行にまたがって他の操作を実行したりすることができます。

vec2 <- (4:7)/2

msdf <- function(x, multiplier=4) {
    mult <- x * multiplier
    subl <- subtract.length(x)
    data.frame(mult, subl)
}

msdf(vec2, 5)
  mult subl
1 10.0 -2.0
2 12.5 -1.5
3 15.0 -1.0
4 17.5 -0.5

multiplier=4は、関数4呼び出すときに値が与えられない場合、引数multiplierデフォルト値が4であることを確認します。

上記のように、彼らは名前(与えられているというだけの理由と呼ばれる、すべての名前付き関数の例ですonetwosubtract.lengthなど)

匿名関数

無名関数は、その名前が示すように、名前が割り当てられていません。これは、関数がより大きい演算の一部である場合に便利ですが、それ自体ではあまり機能しません。匿名関数の頻繁なユースケースの1つは、ベース関数の*applyファミリ内です。

data.frame各列の二乗平均平方根を計算します。

df <- data.frame(first=5:9, second=(0:4)^2, third=-1:3)

apply(df, 2, function(x) { sqrt(sum(x^2)) })
    first    second     third 
15.968719 18.814888  3.872983 

行列の各行の最小値から最大値までのステップ長のシーケンスを作成します。

x <- sample(1:6, 12, replace=TRUE)
mat <- matrix(x, nrow=3)

apply(mat, 1, function(x) { seq(min(x), max(x)) })

無名関数は、単独でも機能します:

(function() { 1 })()
[1] 1

f <- function() { 1 })
f()
[1] 1

RStudioのコードスニペット

これは、自己定義関数を頻繁に使用する人のためのちょっとしたハックです。
「楽しい」RStudio IDEと入力し、Tabキーを押します。

ここに画像の説明を入力

結果は新しい関数のスケルトンになります。

name <- function(variables) {
        
}

自分のスニペットテンプレートを簡単に定義することができます。下のようなテンプレート

name <- function(df, x, y) {
        require(tidyverse)
        out <- 
        return(out)
}

オプションは、[ Global Options -> Code ] Global Options -> Code ]メニューのGlobal Options -> Code Edit Snippets ]です。

関数の引数として列名を渡す

場合によっては、データフレームから関数に列の名前を渡したい場合があります。それらは文字列として提供され、 [[ 。次の例を見てみましょう.Rのコンソールには、選択した変数の基本的な統計情報が表示されます。

basic.stats <- function(dset, vars){
    for(i in 1:length(vars)){
        print(vars[i])
        print(summary(dset[[vars[i]]]))
    }
}

basic.stats(iris, c("Sepal.Length", "Petal.Width"))

上記のコードを実行した結果、選択した変数の名前とその基本要約統計量(最小、第1位、中央値、平均、第3位および最大値)がRコンソールに表示されます。コードdset[[vars[i]]]は引数varsからi番目の要素を選択し、宣言された入力データセットdset対応する列を選択します。例えば、 iris[["Sepal.Length"]]だけを宣言すると、 irisデータセットのSepal.Lengthカラムがベクトルとして出力されます。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow