English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
関数は一連のタスクを実行する文の集合です。R言語自体は多くの内蔵関数を提供しており、自分で関数を作成することもできます。
コードを異なる関数に分ける方法は、あなた次第です。関数に分ける方法は、各関数が特定のタスクを実行するようにすることが一般的です。
関数宣言コンパイラに関数の名前、返値型、引数を教えます。関数定義関数の実際の主体を提供します。
R言語での関数はオブジェクトであり、属性を持つことができます。
R言語での関数の定義は function キーワードを使用し、一般的な形式は以下の通りです:
function_name <- function(arg_1, arg_2, ...) { // 関数体 }
説明:
function_name : 関数名
arg_1, arg_2, ... : 形式引数リスト
関数の返値は return() を使用して指定します。
R言語は多くの便利な内蔵関数を提供しており、それらを定義することなく直接使用できます。
例えば:seq(), mean(), max(), sum(x) そして paste(...) などがあります。
# 出力 32 まで 44 までの全ての数字 print(seq(32,44)) # 2つの数の平均を計算 print(mean(25:82)) # 計算 41 まで 68 全ての数字の和 print(sum(41:68))
上記のコードを実行すると、出力結果は以下の通りです:
[1] 32 33 34 35 36 37 38 39 40 41 42 43 44 [1] 53.5 [1] 1526
特定の機能に対応する関数を自分で作成することができます。定義後は、内蔵関数のように使用できます。
以下に、関数をカスタマイズする方法を示します:
# 系列の平方値までのカウントを行う関数を定義します new.function <- function(a) { for(i in 1:a) { b <- i^2 print(b) } }
次に、関数を呼び出すことができます:
new.function <- function(a) { for(i in 1:a) { b <- i^2 print(b) } } # 関数を呼び出し、引数を渡します new.function(6)
上記のコードを実行すると、出力結果は以下の通りです:
[1] 1 [1] 4 [1] 9 [1] 16 [1] 25 [1] 36
無パラメータの関数を生成することもできます:
new.function <- function() { for(i in 1:5) { print(i^2) } } # 関数を呼び出し、引数を渡さない new.function()
上記のコードを実行すると、出力結果は以下の通りです:
[1] 1 [1] 4 [1] 9 [1] 16 [1] 25
関数の引数は、関数を作成した順に渡すことができますが、順序を指定しない場合もできますが、引数名を指定する必要があります:
# 関数を作成する new.function <- function(a,b,c) { result <- a * b + c print(result) } # 引数名を含まない new.function(5,3,11) # 引数名を含む new.function(a = 11, b = 5, c = 3)
上記のコードを実行すると、出力結果は以下の通りです:
[1] 26 [1] 58
関数を作成する際に、引数にデフォルト値を指定することもできます。引数を渡さない場合、デフォルト値が使用されます:
# デフォルト引数を持つ関数を作成する new.function <- function(a = 3, b = 6) { result <- a * b print(result) } # 関数を呼び出し、引数を渡さない場合、デフォルト値が使用されます new.function() # 関数を呼び出し、引数を渡す new.function(9,5)
上記のコードを実行すると、出力結果は以下の通りです:
[1] 18 [1] 45
遅延計算は、システムが必要とする計算結果が得られるまで計算を遅延させます。結果が必要でない場合は、計算を行いません。
デフォルトでは、R関数は引数の計算が遅延的です。つまり、計算を行うときにのみ呼び出されます:
f <- function(x) { 10 } f()
上記のコードを実行すると、出力結果は以下の通りです:
[1] 10
上記のコードを実行すると、エラーが発生しません。引数を渡していないにもかかわらず、関数内で引数xを使用していないため、呼び出されずエラーが発生しません。
new.function <- function(a, b) { print(a^2) print(a) print(b) # bを使用するが、渡していないため、エラーが発生します } # 引数を1つ渡す new.function(6)
上記のコードを実行すると、出力結果は以下の通りです:
[1] 36 [1] 6 Error in print(b) : 引数「b」が不足しています。デフォルト値もありません。 Calls: new.function -> print 実行を停止する