在R中使用strsplit对列表进行拆分。
在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循环中吗?
问题的原因是想要在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) }
这有点奇怪,但真的很有用。