从列表中获取嵌套元素

时间:2015-07-24 15:03:30

标签: r list data-manipulation

我试图从列表中获取嵌套元素。我可以使用unlist(pull_lists[[i]]$content[[n]]['sha'])提取元素,但是,我似乎无法将它们插入到嵌套列表中。我在gist中提取了列表中的单个元素,这将在下面创建可重现的示例。以下是我到目前为止的情况:

library("devtools")
pull_lists <- list(source_gist("669dfeccad88cd4348f7"))

sha_list <- list()
for (i in length(pull_lists)){
  for (n in length(pull_lists[[i]]$content)){
  sha_list[i][n] <- unlist(pull_lists[[i]]$content[[n]]['sha'])
  }
}

如何以嵌套方式插入元素?

1 个答案:

答案 0 :(得分:1)

当我下载内容时,我得到的结构比你复杂得多。对我而言,它不是pull_lists[[i]]$content,而是pull_lists[[i]]$value$content[[1 or 2]]$parents$sha。没有任何东西填充的原因是因为没有任何东西可以填充(即,n = 0)。

之前我必须处理类似的数据结构。我发现在未列出之后搜索命名结构要容易得多,而不是找出正确的子集序列。

以下是一个例子:

sha_locations <- grep("sha$",names(unlist(pull_list[[1]])))
unlist(pull_list[[1]])[sha_locations] 

稍微清理for循环,这看起来像:

sha_list <- lapply(
   pull_list, 
   function(x) unlist(x)[grep("sha$",names(unlist(x)))]
)

由于存在多个SHA,并且该问题仅询问特定位置的SHA,因此需要提取这些SHA:

sha_list <- sha_list[[1]][attr(sha_list[[1]], "names")=="value.content.sha"]