私の現在のやり方は
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)))