hello = function(x) {
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 つのパーツがあります。
{} の間に納めます。hello = function(x) {
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!"
関数の中に作ったものは、関数の中にしか存在しない。
sumofsquare = function(x) {
ss = (x - mean(x))^2 # 関数の外から見れない
ssq = sum(ss) # 関数の外から見れない
ssq # 関数の外に返す
}
data = sample(1:10, 5, replace = TRUE)
data[1] 7 6 10 7 4
value = sumofsquare(data)
value[1] 18.8
ところが、関数は外の環境に存在するものは見れます。 このように関数を作ると、バグを起こしやすいので、注意。
sumofsquare = function(x) {
ss = (s - mean(s))^2 # s は関数の外にあるが、関数の引数ではない
ssq = sum(ss) # 関数の外から見れない
ssq # 関数の外に返す
}
s = sample(100:1000, 5, replace = TRUE)
s[1] 169 291 862 713 721
data = sample(1:10, 5, replace = TRUE)
data[1] 5 7 9 7 3
value = sumofsquare(data)
value # これは s の平方和です。[1] 365388.8
関数は次のようにもかけます。 \(x){...} はラムダ式 (lambda expression) とも呼ばれています。
add_one = \(x) { x + 1}
add_one(5)[1] 6
無名関数をつくるときに便利な書き方です。
# どちれも無名関数ですが、2つ目の関数がはラムダ式です。
z = 1:5
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