Return json 中缺少项目时不适用

Return NA when missing item in json

我在一个迭代多个 json 的函数中有一些代码,如下所示:

my_tibble <- tibble(col_a = json$xyz$xyz,
col_b = json$xyz2$xyz2,
col_c = json$xyz3,
...)

如果 json 中缺少 col_b,我想返回一个 NA,所以这里 json$xyz2$xyz2

现在它只是抛出一个错误:

Error: Column "col_b" must be length 1 or 36, not 0

一种选择是将缺失值更改为 NA 作为 json 本身的一部分,然后创建您的 tibble。以下解决方案适用于我的 toy 列表。

library(tidyverse)
#First find max length in items of json
max_length <- max(sapply(json,length))

#Set length of each items so that `NA` is included 
json<- lapply(json, function(x){
  length(x)<-max_length
  x
  })

#Now cerate tibble
my_tibble <- tibble(col_a = json$xyz$xyz,
                    col_b = json$xyz2$xyz2,
                    col_c = json$xyz3)

OP 可以共享 json 的详细信息,以便可以根据此解决方案对其进行验证。

好的,我找到了解决问题的方法,这可能不是最优雅的解决方案,但至少很容易实现:

NAfy <- function(x){
  if_else(is.null(x), NA, x)
}

my_tibble <- tibble(col_a = NAfy(json$xyz$xyz),
                    col_b = NAfy(json$xyz2$xyz2),
                    col_c = NAfy(json$xyz3))

现在有用的是不要为每一列复制粘贴此函数,但这是另一次。