ifelse try组合只返回长度为1的对象

时间:2017-05-13 12:28:31

标签: json r error-handling

如果您运行此操作,您将获得有关财务报表的信息

library(RJSONIO)
data<-fromJSON("http://www.registeruz.sk/cruz-public/api/uctovny-vykaz?id=4455316",encoding = "UTF-8")

当你运行它时,你会得到长度为312的向量,其中包含资产负债表中的项目

data$obsah$tabulky[[1]]$data

我在循环中为更多公司做这个,有时上面的json路径不存在会返回错误。因此,如果出现错误,我会尝试返回NA,否则我想从上面提到的路径中返回对象

ifelse(class(try(data$obsah$tabulky[[1]]$data))=="try-error",NA,data$obsah$tabulky[[1]]$data)

然而,当我运行它时,它只返回1项向量未满312

1 个答案:

答案 0 :(得分:0)

您无法从ifelse获得所需的结果,因为根据该函数的文档,“ifelse会返回与test相同形状的值。”您的测试长度为1,因此ifelse仅返回长度为1的对象。

要返回不同维度的对象,您可以分解ifelse部分并将其包裹在lapply的调用中。这是一种方法,通过URL向量迭代您的过程并在列表中收集结果:

lapply(urls, function(x) {

    # you might want try here, too, in case you get errors at this stage
    X <- try(fromJSON(x, encoding = "UTF-8"))

    Y <- try(X$obsah$tabulky[[1]]$data)

    if (class(Y) == "try-error") {

        NA

    } else {

        Y

    }

})