在R中使用strsplit对列表进行拆分。

10 浏览
0 Comments

在R中使用strsplit对列表进行拆分。

我正在学习R,但很难理解如何从列表对象中提取元素。我已经将一个json文件解析到R中,得到了一个列表对象。但是我无法弄清楚如何从列表中提取各种json元素。这是我解析json后数据的简化样貌:

 > #将数据解析为R对象#
 > listJson = fromJSON(,final.name, method = "C")
 > head(listJson,6)
[[1]]
[[1]]$contributors
NULL
[[1]]$favorited
[1] FALSE
...[省略]...
[[5]]
[[5]]$contributors
NULL
[[5]]$favorited
[1] FALSE

我可以找出列表中一个对象的收藏数据

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

但是,我对如何提取列表中所有对象的收藏数据非常困惑。我已经研究了sapply,这是正确的方法吗?我需要将上面的代码放入for...next循环中吗?

0
0 Comments

问题的原因是想要在R中的一个列表上使用strsplit函数,但是strsplit函数只能在字符向量上使用,不能直接在列表上使用。解决方法是使用sapply函数来逐个对列表中的元素应用strsplit函数。

sapply函数会对列表中的每个元素应用某个函数。在这种情况下,想要访问列表中的每个元素。sapply函数可以实现这个目的。例如,如果想要访问列表中每个元素的第一个子元素:

sapply(listJson, "[[", 1)

或者如果想要访问名为"favorited"的项,可以使用:

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) 
}

这有点奇怪,但真的很有用。

0