更改R中列表列表中的特定名称

时间:2016-09-20 06:19:28

标签: r list

我在R中有一个列表列表。我创建了以下示例列表来说明我的问题:

example_list <- list(
                  list(id1 = 123, id2 = 321, school = 'notting'),
                  list(id3 = 12, house = 'Y'),
                  list(id4 = 18)
)

我想要做的基本上是将id元素的名称替换为一个一致的名称,即id。所以我的输出是:

 solution_list <- list(
                  list(id = 123, id = 321, school = 'notting'),
                  list(id = 12, house = 'Y'),
                  list(id = 18)
)

请注意,子列表可能包含多个id_元素。

我已经写了这个函数来处理每个子列表:

replace_names<- function(x, r) {
indices <- grepl(r, names(x))
if(length(indices) > 0) {names(x)[indices] <- r}

}

我的想法是使用:

lapply(example, replace_names, r = "id")

虽然我的功能由于某种原因不起作用,而且这种方法看起来有点hacky,有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我们会替换nameslist元素,这些元素具有&#39; id&#39;接着是数字(使用grep)到&#39; id&#39;,然后返回list元素。

sol_list <- lapply(example_list, function(x) {
                   names(x)[grep("id", names(x))] <- "id"
                    x})
identical(solution_list, sol_list)
#[1] TRUE

或者其他选项是使用subnames中删除号码(因为只有&#39; id&#39;数字作为后缀

lapply(example_list, function(x) setNames(x, sub("\\d+", "", names(x))))