R 大列表的结构

R 大列表的结构,r,list,httr,R,List,Httr,下面是一个可复制的示例: a <- list(list(LETTERS[1:3],LETTERS[1:3]),list(LETTERS[4:6])) a # [[1]] # [[1]][[1]] # [1] "A" "B" "C" # # [[1]][[2]] # [1] "A" "B" "C" # # [[2]] # [[2]][[1]] # [1] "D" "E" "F" 具体到: [[2]] [[2]][[1]] Response [https://api.livechatin

下面是一个可复制的示例:

a <- list(list(LETTERS[1:3],LETTERS[1:3]),list(LETTERS[4:6]))
a
# [[1]]
# [[1]][[1]]
# [1] "A" "B" "C"
# 
# [[1]][[2]]
# [1] "A" "B" "C"
# 
# [[2]]
# [[2]][[1]]
# [1] "D" "E" "F"
具体到:

[[2]]
[[2]][[1]]
Response [https://api.livechatinc.com/v2/chats?/date_from=2014-03-22&page=5]
Date: 2015-03-20 15:41
Status: 200
Content-Type: application/json; charset=utf-8
Size: 133 kB
并希望使用httr的内容函数提取内容。使用lappy返回:错误:is.responsex不为TRUE

我知道访问每个列表的唯一方法是直接调用每个列表:

content(listName[[1]][[2]][[1]])
对如何调用每个函数的内容有何建议


我尝试了rapply中的内容,也取消了列表,然后内容在错误消息中没有变化。

下面是一个听起来有点像您的示例结构:

library("httr")
u <- "http://www.google.com"
g <- GET(u)
a <- list()
a[[1]] <- g
a[[2]] <- list(g, g)
a[[3]] <- list(g, list(g))
a[[4]] <- list(list(g, list(list(g, g))))
str(a, 1)
# List of 4
#  $ :List of 9
#   ..- attr(*, "class")= chr "response"
#  $ :List of 2
#  $ :List of 2
#  $ :List of 1
结果是提取内容的列表:

str(out)
# List of 8
#  $ :Classes 'HTMLInternalDocument', 'HTMLInternalDocument', 'XMLInternalDocument', 'XMLAbstractDocument' <externalptr> 
#  $ :Classes 'HTMLInternalDocument', 'HTMLInternalDocument', 'XMLInternalDocument', 'XMLAbstractDocument' <externalptr> 
#  $ :Classes 'HTMLInternalDocument', 'HTMLInternalDocument', 'XMLInternalDocument', 'XMLAbstractDocument' <externalptr> 
#  $ :Classes 'HTMLInternalDocument', 'HTMLInternalDocument', 'XMLInternalDocument', 'XMLAbstractDocument' <externalptr> 
#  $ :Classes 'HTMLInternalDocument', 'HTMLInternalDocument', 'XMLInternalDocument', 'XMLAbstractDocument' <externalptr> 
#  $ :Classes 'HTMLInternalDocument', 'HTMLInternalDocument', 'XMLInternalDocument', 'XMLAbstractDocument' <externalptr> 
#  $ :Classes 'HTMLInternalDocument', 'HTMLInternalDocument', 'XMLInternalDocument', 'XMLAbstractDocument' <externalptr> 
#  $ :Classes 'HTMLInternalDocument', 'HTMLInternalDocument', 'XMLInternalDocument', 'XMLAbstractDocument' <externalptr>

也许rapply会更有用…?或者可能使用unlist?举一个小的可复制的例子,你的列表是如何构造的?所有的叶子都是列表?你是怎么得到这个结构的?似乎如果你有代码创建这个,也许你可以简化它,以避免这个问题。看起来很有希望-它在第一次通过时不起作用,但我会再试一次,并先休息一周。干杯。我没有使用这个,因为我意识到嵌套的for循环会得到我的结果,但我认为这个问答作为一个好的例子是值得保留的。
extract <- function(x) {
    if(inherits(x, "response")) {
        return(content(x))
    } else if(length(x)){
        lapply(x, extract) # apply `extract` recursively
    }
}

out <- unlist(lapply(a, extract))
str(out)
# List of 8
#  $ :Classes 'HTMLInternalDocument', 'HTMLInternalDocument', 'XMLInternalDocument', 'XMLAbstractDocument' <externalptr> 
#  $ :Classes 'HTMLInternalDocument', 'HTMLInternalDocument', 'XMLInternalDocument', 'XMLAbstractDocument' <externalptr> 
#  $ :Classes 'HTMLInternalDocument', 'HTMLInternalDocument', 'XMLInternalDocument', 'XMLAbstractDocument' <externalptr> 
#  $ :Classes 'HTMLInternalDocument', 'HTMLInternalDocument', 'XMLInternalDocument', 'XMLAbstractDocument' <externalptr> 
#  $ :Classes 'HTMLInternalDocument', 'HTMLInternalDocument', 'XMLInternalDocument', 'XMLAbstractDocument' <externalptr> 
#  $ :Classes 'HTMLInternalDocument', 'HTMLInternalDocument', 'XMLInternalDocument', 'XMLAbstractDocument' <externalptr> 
#  $ :Classes 'HTMLInternalDocument', 'HTMLInternalDocument', 'XMLInternalDocument', 'XMLAbstractDocument' <externalptr> 
#  $ :Classes 'HTMLInternalDocument', 'HTMLInternalDocument', 'XMLInternalDocument', 'XMLAbstractDocument' <externalptr>