如何在嵌套列表中获取和设置元素

时间:2014-01-28 23:07:41

标签: r list nested

假设我有以下结构:

R-代码

listAll = list()
list3 = list(id=14,attr1 = '',attr2='n4',attr3=list(text1='tx1',text2=''))
list4 = list(id=15,attr1 = '',attr2='n1',attr3=list(text1='tx1',text2=''))
listAll = append(listAll,list(values=list3))
listAll = append(listAll,list(values=list4))
str(listAll)

#result

List of 2
$ values:List of 4
..$ id   : num 14
..$ attr1: chr ""
..$ attr2: chr "n4"
..$ attr3:List of 2
.. ..$ text1: chr "tx1"
.. ..$ text2: chr ""
$ values:List of 4
..$ id   : num 15
..$ attr1: chr ""
..$ attr2: chr "n1"
..$ attr3:List of 2
.. ..$ text1: chr "tx1"
.. ..$ text2: chr ""

我如何设置/获取属于id 14的attr2?

我认为这并不困难......我所要做的就是(获得):

  1. 获取已搜索ID的索引
  2. 获取与此索引相对应的列表
  3. 从第二步的列表中获取$ attr1的值
  4. 不幸的是,我不知道如何完成第一点。

    假设我有id = 14和相应的索引1 ..接下来的步骤将是(两个和三个一起):

    listAll[[1]]$attr2 #results "n4"
    

    所以问题是如何获得与id = 14匹配的索引(在此示例中为= 1)。 有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

您可以使用sapply

实现所需目标
##  sapply(listAll, "[[", "id")
## werte werte 
##    14    15 

然后你可以申请which来获得像这样的索引

which(sapply(listAll, "[[", "id") == 14)
## werte   
##     1 

which(sapply(listAll, "[[", "id") == 15)
## werte 
##     2