Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

in R, extract part of object from list

Tags:

r

I'm just learning R and having a hard time wrapping my head around how to extract elements from objects in a list. I've parsed a json file into R giving me list object. But I can't figure out how, from there, to extract various json elements from the list. here's a truncated look at how my data appears after parsing the 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

I can figure out how to extract the favorites data for one of the objects in the list

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

But I'm very confused about how to extract favorited for all objects in the list. I've looked into sappily, is that the correct approach? Do I need to put the above code into a for...next loop?

like image 545
Martin Avatar asked Jul 17 '12 20:07

Martin


People also ask

How do you access part of a list in R?

Accessing List Elements. Elements of the list can be accessed by the index of the element in the list. In case of named lists it can also be accessed using the names.

How do you subset a list?

To subset lists we can utilize the single bracket [ ] , double brackets [[ ]] , and dollar sign $ operators. Each approach provides a specific purpose and can be combined in different ways to achieve the following subsetting objectives: Subset list and preserve output as a list.

How do I select an element from a vector in R?

The way you tell R that you want to select some particular elements (i.e., a 'subset') from a vector is by placing an 'index vector' in square brackets immediately following the name of the vector. For a simple example, try x[1:10] to view the first ten elements of x.


1 Answers

sapply is going to apply some function to every element in your list. In your case, you want to access each element in a (nested) list. sapply is certainly capable of this. For instance, if you want to access the first child of every element in your list:

sapply(listJson, "[[", 1)

Or if you wanted to access the item named "favorited", you could use:

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

Note that the [ operator will take a subset of the list you're working with. So when you access myList[1], you still have a list, it's just of length 1. However, if you reference myList[[1]], you'll get the contents of the first space in your list (which may or may not be another list). Thus, you'll use the [[ operator in sapply, because you want to get down to the contents of the list.

like image 105
Jeff Allen Avatar answered Sep 18 '22 13:09

Jeff Allen