= function(x) {
hello if(!is.character(x)) {
stop("Please provide a character string.")
}sprintf("Hello %s!", x)
}
hello(214)
Error in hello(214): Please provide a character string.
hello("Yukio")
[1] "Hello Yukio!"
関数をつくることにより、 での作業がとても楽になります。 コードを繰り返して使うなら関数をつくりましょう。
R の関数に 2 つのパーツがあります。
{}
の間に納めます。= function(x) {
hello if(!is.character(x)) {
stop("Please provide a character string.")
}sprintf("Hello %s!", x)
}
hello(214)
Error in hello(214): Please provide a character string.
hello("Yukio")
[1] "Hello Yukio!"
関数の中に作ったものは、関数の中にしか存在しない。
= function(x) {
sumofsquare = (x - mean(x))^2 # 関数の外から見れない
ss = sum(ss) # 関数の外から見れない
ssq # 関数の外に返す
ssq
}= sample(1:10, 5, replace = TRUE)
data data
[1] 7 6 10 7 4
= sumofsquare(data)
value value
[1] 18.8
ところが、関数は外の環境に存在するものは見れます。 このように関数を作ると、バグを起こしやすいので、注意。
= function(x) {
sumofsquare = (s - mean(s))^2 # s は関数の外にあるが、関数の引数ではない
ss = sum(ss) # 関数の外から見れない
ssq # 関数の外に返す
ssq
}= sample(100:1000, 5, replace = TRUE)
s s
[1] 169 291 862 713 721
= sample(1:10, 5, replace = TRUE)
data data
[1] 5 7 9 7 3
= sumofsquare(data)
value # これは s の平方和です。 value
[1] 365388.8
関数は次のようにもかけます。 \(x){...}
はラムダ式 (lambda expression) とも呼ばれています。
= \(x) { x + 1}
add_one add_one(5)
[1] 6
無名関数をつくるときに便利な書き方です。
# どちれも無名関数ですが、2つ目の関数がはラムダ式です。
= 1:5
z sapply(z, FUN = function(s){s^2})
[1] 1 4 9 16 25
sapply(z, FUN = \(s){s^2})
[1] 1 4 9 16 25