R関数


関数は、呼び出されたときにのみ実行されるコードのブロックです。

パラメータと呼ばれるデータを関数に渡すことができます。

関数は結果としてデータを返すことができます。


関数の作成

関数を作成するには、次のfunction()キーワードを使用します。

my_function <- function() { # create a function with the name my_function
  print("Hello World!")
}

関数を呼び出す

関数を呼び出すには、 my_function()のように、関数名の後に括弧を付けて使用します

my_function <- function() {
  print("Hello World!")
}

my_function() # call the function named my_function

引数

情報は引数として関数に渡すことができます。

引数は、関数名の後の括弧内に指定されます。引数はコンマで区切るだけで、いくつでも追加できます。

次の例には、1つの引数(fname)を持つ関数があります。関数が呼び出されると、フルネームを出力するために関数内で使用される名が渡されます。

my_function <- function(fname) {
  paste(fname, "Griffin")
}

my_function("Peter")
my_function("Lois")
my_function("Stewie")

パラメータまたは引数?

「パラメータ」と「引数」という用語は、同じこと、つまり関数に渡される情報に使用できます。

関数の観点から:

パラメーターは、関数定義の括弧内にリストされている変数です。

引数は、関数が呼び出されたときに関数に送信される値です。



引数の数

デフォルトでは、関数は正しい数の引数を使用して呼び出す必要があります。つまり、関数で2つの引数が必要な場合は、2つの引数を使用して関数を呼び出す必要があります。それ以上でも、それ以下でもありません。

この関数は2つの引数を期待し、2つの引数を取得します。

my_function <- function(fname, lname) {
  paste(fname, lname)
}

my_function("Peter", "Griffin")

1つまたは3つの引数を使用して関数を呼び出そうとすると、エラーが発生します。

この関数は2つの引数を期待し、1つの引数を取得します。

my_function <- function(fname, lname) {
  paste(fname, lname)
}

my_function("Peter")

デフォルトのパラメータ値

次の例は、デフォルトのパラメータ値を使用する方法を示しています。

引数なしで関数を呼び出すと、デフォルト値が使用されます。

my_function <- function(country = "Norway") {
  paste("I am from", country)
}

my_function("Sweden")
my_function("India")
my_function() # will get the default value, which is Norway
my_function("USA")

戻り値

関数が結果を返すようにするには、次のreturn()関数を使用します。

my_function <- function(x) {
  return (5 * x)
}

print(my_function(3))
print(my_function(5))
print(my_function(9))

上記のコードの出力は次のようになります。

[1] 15
[1] 25
[1] 45

入れ子関数

ネストされた関数を作成するには、次の2つの方法があります。

  • 別の関数内で関数を呼び出します。
  • 関数内に関数を記述します。

別の関数内で関数を呼び出します。

Nested_function <- function(x, y) {
  a <- x + y
  return(a)
}

Nested_function(Nested_function(2,2), Nested_function(3,3))

例の説明

この関数は、xにyを追加するように指示します。

最初の入力Nested_function(2,2)は、メイン関数の「x」です。

2番目の入力Nested_function(3,3)は、メイン関数の「y」です。

したがって、出力は(2 + 2)+(3 + 3)= 10です。

関数内に関数を記述します。

Outer_func <- function(x) {
  Inner_func <- function(y) {
    a <- x + y
    return(a)
  }
  return (Inner_func)
}
output <- Outer_func(3) # To call the Outer_func
output(5)

例の説明

Inner_funcはOuter_func内で定義(ネスト)されているため、関数を直接呼び出すことはできません。

2番目のステップとしてInner_funcを呼び出すには、最初にOuter_funcを呼び出す必要があります。

outputという新しい変数を作成し、それに値を指定する必要があります。ここでは3です。

次に、目的の値「y」(この場合は5)を使用して出力を出力します。

したがって、出力は8(3 + 5)になります。


再帰

Rは関数の再帰も受け入れます。これは、定義された関数がそれ自体を呼び出すことができることを意味します。

再帰は、一般的な数学的およびプログラミングの概念です。これは、関数がそれ自体を呼び出すことを意味します。これには、データをループして結果に到達できるという利点があります。

開発者は再帰に非常に注意する必要があります。これは、終了しない関数、または過剰な量のメモリやプロセッサパワーを使用する関数の記述に非常に簡単に陥る可能性があるためです。ただし、正しく記述されている場合、再帰はプログラミングに対して非常に効率的で数学的にエレガントなアプローチになります。

この例でtri_recursion()は、はそれ自体を呼び出すように定義した関数です(「recurse」)。変数をデータとして使用します。この 変数は、再帰するたびにk()をデクリメントします。-1再帰は、条件が0以下の場合(つまり、0の場合)に終了します。

新しい開発者にとって、これがどのように正確に機能するかを理解するのに時間がかかる場合があります。それを見つける最良の方法は、テストして変更することです。

tri_recursion <- function(k) {
  if (k > 0) {
    result <- k + tri_recursion(k - 1)
    print(result)
  } else {
    result = 0
    return(result)
  }
}
tri_recursion(6)