我现在的方式是
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总是标量。
MyRprof告诉我花费的大部分时间在于sapplyandFun和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)))