私の現在のやり方は
coalesce <- function(x){
if (is.null(x)) NA else x
}
data[,aa:=sapply(JSON, function(x) coalesce(x$a))]
data[,bb:=sapply(JSON, function(x) x$b)]
> JSON <- list(list(a=1, b=1), list(b=2))
> JSON
[[1]]
[[1]]$a
[1] 1
[[1]]$b
[1] 1
[[2]]
[[2]]$b
[1] 2
> sapply(JSON, function(x) coalesce(x$a))
[1] 1 NA
> sapply(JSON, function(x) x$b)
[1] 1 2
JSON
はリストのリストで、各リストにはa
取得したいものを含めることができます。a
存在しない場合はNA
返されます。各リストには が含まれている必要がありますb
。a
とはb
常にスカラーです。
私Rprof
は、費やされた時間の大部分がsapply
とFun
とにあることを教えてくれますcoalesce
。
改善する方法はないか悩んでいます。
アップデート
サンプルデータ
x <- list(a=1, b=1)
y <- list(a=1)
JSON <- rep(list(x,y),300000)
system.time(sapply(JSON, function(x) x$a))
system.time(sapply(JSON, function(x) coalesce(x$b)))