Map
- 引数に
ベクトル
やリスト
を与えて、個別に処理をしていく
- 処理はリスト形式で行われて、結果もリスト形式で返される
# 通常の高階関数
1:3 %>% Map(function(x){x + 2}, .) %>% list.tree()
## . = list 3 (216 bytes)
## . [[1]] = double 1= 3
## . [[2]] = double 1= 4
## . [[3]] = double 1= 5
# Map関数の{lambdaR}版
1:3 %>% Map_(x: x + 2) %>% list.tree()
## . = list 3 (216 bytes)
## . [[1]] = double 1= 3
## . [[2]] = double 1= 4
## . [[3]] = double 1= 5
# 結果をベクトルで返すこともできる
# --- Map Vector / Map unlist
1:3 %>% Mapv_(x: x + 2)
## [1] 3 4 5
1:3 %>% Mapu_(x: x + 2)
## [1] 3 4 5
# 複数のデータセットを代入する
list(1:3, 11:13) %>% Map2_(x, y: x + y) %>% list.tree()
## . = list 3 (216 bytes)
## . [[1]] = integer 1= 12
## . [[2]] = integer 1= 14
## . [[3]] = integer 1= 16
# 結果をベクトルで返すこともできる
list(1:3, 11:13) %>% Map2v_(x, y: x + y)
## [1] 12 14 16
Reduce
- 引数に
ベクトル
やリスト
を与えて、前から逐次的に処理をしていく
- 処理はリスト形式で行われて、結果もリスト形式で返される
# 通常の高階関数
1:10 %>% Reduce(function(x, y){x + y}, .)
## [1] 55
# 途中プロセスを見ることもできる
1:10 %>% Reduce(function(x, y){x + y}, ., accumulate = TRUE)
## [1] 1 3 6 10 15 21 28 36 45 55
# Reduce関数の{lambdaR}版
1:10 %>% Reduce_(x, y: x + y)
## [1] 55
# こちらも途中プロセスを見ることもできる
1:10 %>% Reduce_(x, y: x + y, accumulate = TRUE)
## [1] 1 3 6 10 15 21 28 36 45 55
(参考)Reduce関数の動作イメージ
# 直前の計算値を逐次的に使って累積してく
interest <- c(1.05, 1.05, 1.05, 1.05, 1.05, 1.05, 1.05, 1.05, 1.05, 1.05,
1.05, 1.05, 1.05, 1.05, 1.05, 1.05, 1.05, 1.05, 1.05, 1.05)
Reduce(function(a, b){a * b},init = 100, interest, accumulate = T)
## [1] 100.0000 105.0000 110.2500 115.7625 121.5506 127.6282 134.0096
## [8] 140.7100 147.7455 155.1328 162.8895 171.0339 179.5856 188.5649
## [15] 197.9932 207.8928 218.2875 229.2018 240.6619 252.6950 265.3298
Filter
- 条件を与えて、一致した要素のみを取り出す
Negate()
とFinter()
を組み合わせると逆の操作も可能
- 処理はベクトル形式で行われて、結果もベクトル形式で返される
# 通常の高階関数
1:10 %>% Filter(function(x){x %% 2 == 0}, .)
## [1] 2 4 6 8 10
# Filter関数の{lambdaR}版
1:10 %>% Filter_(x: x %% 2 == 0)
## [1] 2 4 6 8 10
Negate
- 条件を与えて、一致しない要素を取得する
Filter
と併せて使うことで、Filter
と逆の操作(偽の取得)を行うことができる
- 同様のことは
Filter()
の条件変更(from == to <>)でも可能
- 処理はベクトル形式で行われて、結果もベクトル形式で返される
# 通常の高階関数 (調整中)
1:10 %>% Filter(Negate(function(x){x %% 2 == 0}), .)
## [1] 1 3 5 7 9
# Filterの逆処理
1:10 %>% Filter_(Negate_(x: x %% 2 == 0))
## [1] 1 3 5 7 9
Find
- 条件を与えて、一致した要素のみを取り出す
- 処理はベクトル形式で行われて、結果もベクトル形式で返される
# 通常の高階関数
LETTERS %>% Find(function(x) {tolower(x) == "f"}, .)
## [1] "F"
# Filter関数の{lambdaR}版
LETTERS %>% Find_(x: tolower(x) == "f")
## [1] "F"
(参考) 関数紹介
# 大文字を小文字に変換する
tolower("A")
## [1] "a"
Position
- 条件を与えて、一致した要素のみを取り出す
- 処理はベクトル形式で行われて、結果もベクトル形式で返される
# 通常の高階関数
LETTERS %>% Position(function(x) {x == "F"}, .)
## [1] 6
# Filter関数の{lambdaR}版
LETTERS %>% Position_(x: x == "F")
## [1] 6