【问题标题】:in R, extract part of object from list在 R 中,从列表中提取对象的一部分
【发布时间】:2012-07-16 19:55:15
【问题描述】:

我刚刚学习 R,并且很难思考如何从列表中的对象中提取元素。我已经将一个 json 文件解析为 R 给我列表对象。但我不知道如何从那里从列表中提取各种 json 元素。这是解析 json 后我的数据如何显示的截断视图:

 > #Parse data into R objects#
 > list.Json= fromJSON(,final.name, method = "C")
 > head(listJson,6)
[[1]]
[[1]]$contributors
NULL

[[1]]$favorited
[1] FALSE

...[truncating]...
[[5]]
[[5]]$contributors
NULL

[[5]]$favorited
[1] FALSE

我可以弄清楚如何为列表中的一个对象提取收藏夹数据

> first.object=listJson[1]
> ff=first.object[[1]]$favorited
> ff
[1] FALSE

但是我很困惑如何为列表中的所有对象提取收藏夹。我仔细研究了一下,这是正确的方法吗?我是否需要将上述代码放入 for...next 循环中?

【问题讨论】:

  • 列表在 R 中有点令人困惑。它们实际上更类似于来自其他语言的哈希图/字典。看看stackoverflow.com/questions/2050790/… 以获得一些见解。
  • 将 JSON 转换为 data.frame 可能会很痛苦,尤其是在不能保证从一个对象到下一个对象的键相同的情况下。我喜欢@Jeff Allen 的回答,但是当你的缺失值是NULL 而不是NA 时要小心。 (如果您使用的是RJSONIO,您可以使用fromJSON(..., nullValue = NULL) 控制默认值)。例如,sapply(listJson, "[[", "contributors") 在其缺失值为 NULL 时返回一个列表,但在其缺失值为 'NA' 时返回一个向量。

标签: r


【解决方案1】:

sapply 将对列表中的每个元素应用一些函数。在您的情况下,您希望访问(嵌套)列表中的每个元素。 sapply 当然可以做到这一点。例如,如果您想访问列表中每个元素的第一个子元素:

sapply(listJson, "[[", 1)

或者,如果您想访问名为“收藏”的项目,您可以使用:

sapply(listJson, "[[", "favorited")

请注意,[ 运算符将采用您正在使用的列表的子集。因此,当您访问myList[1] 时,您仍然有一个列表,它的长度仅为 1。但是,如果您引用 myList[[1]],您将获得列表中第一个空格的内容(这可能是也可能不是另一个列表)。因此,您将在 sapply 中使用 [[ 运算符,因为您想深入了解列表的内容。

【讨论】:

  • 谢谢,让我的头脑围绕 R 列表一直是一个挑战。我最终也能够使用 for 循环来实现它:t1=NULL for (i in 1:length(list.Json)) { check=list.Json[[i]]$favorited if(typeof(check)= ="NULL"){ check=list(NULL) } t1=c(t1,check) }
  • 这很奇怪,但真的很有用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-03
  • 2016-11-04
  • 2019-10-06
  • 2011-04-02
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
相关资源
最近更新 更多