我现在的方式是
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
告诉我花费的大部分时间在于sapply
andFun
和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)))