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))
现在有用的是不要为每一列复制粘贴此函数,但这是另一次。
我在一个迭代多个 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))
现在有用的是不要为每一列复制粘贴此函数,但这是另一次。