リストやベクターを超えてfunctionを機能させる。
lapplyはリストで返す。
lapply(x, FUN)
# リストを新たに作る
new_list <- list(a = "apple", b = "orrange", c = list(h = "book", i = "pen"))
new_list
## $a
## [1] "apple"
##
## $b
## [1] "orrange"
##
## $c
## $c$h
## [1] "book"
##
## $c$i
## [1] "pen"
# lapplyでncharを行う
lapply(new_list, nchar)
## $a
## [1] 5
##
## $b
## [1] 7
##
## $c
## h i
## 4 3
FUNは既存のものでもいいし、新たに作ってもいい。
新たに作る場合、lapplyの中に組み込むこともできる
lapply(new_list, function(x) {x$timestamp})みたいな感じ。詳細はintermediate R参照 *timestampはリストの名前の例
anynomousなfunctionをapplyに組み込む場合、[[を使うこともできる。Data.campの例は
1. lapply(logs, function(x) {x$timestamp})
2. lapply(logs, function(x) [[(x, “timestamp”))
リストでaを指定する場合、2通りの方法があり、それに基づく
new_list[["a"]]
## [1] "apple"
`[[`(new_list, "a")
## [1] "apple"
# PENを指定するなら(リストの中のリスト or 深層を指定するなら)c()を用いる
new_list[[c("c", "i")]]
## [1] "pen"
`[[`(new_list, c("c", "i"))
## [1] "pen"
functionを使わないくてもリスト内を指定してとってきてもよい。Logsの中身が下記なら
[[1]]
[[1]]$success
[1] TRUE
[[1]]$details
[[1]]$details$message
[1] “check”
[[1]]$timestamp
[1] “2015-09-14 23:01:07 UTC”
[[2]]
[[2]]$success
[1] TRUE
[[2]]$details
[[2]]$details$message
[1] “all good”
[[2]]$timestamp
[1] “2015-09-15 00:00:13 UTC”
#下記のような指定でもよい
# vapply(logs, `[[`, "success", FUN.VALUE = logical(1))
#深層の指定だとc()を用いる
# lapply(logs, `[[`, c("details", "message"))
sapplyはsimpleにベクターで返そうとするが時にできない。
元データによってはリストで返したりベクターで返すので予想できず危険。
# vapply リターン返すものを規定できる。ので返せない指示を出すとエラーになる。
vapply(x, FUN = , FUN.VALUE = , USE.NAMES = TRUE)
FUN.VALUEの後ろはnumeric(4), logical(1) といった形で返すものを規定
FAN.VALUEで規定できるのはinteger(), numeric(), character() and logical()
第2因数があればもうすこし変更 grepl(“x”, y)であれば vapply(“x”, FUN = , FUN.VALUE = , y)
Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.