r - 取消列出时防止元素重命名

标签 r list

我有一个向量列表和子列表,我想取消列出子列表以仅获取向量列表。

my.list <- list(a = 1, 
                li1 = list(b = 2, c = 3), 
                li2 = list(d = 4, e = 5))
> my.list
$a
[1] 1

$li1
$li1$b
[1] 2

$li1$c
[1] 3


$li2
$li2$d
[1] 4

$li2$e
[1] 5

> unlist(my.list, recursive = FALSE)
$a
[1] 1

$li1.b
[1] 2

$li1.c
[1] 3

$li2.d
[1] 4

$li2.e
[1] 5

简单的方法是将 unlistrecursive = FALSE 一起使用,但如您所见,子列表名称附加到新元素名称。如果我使用 use.names = FALSE,整个元素名称将被删除。

有没有一种简单的方法来保留元素名称但删除附加的别名?

感谢任何帮助。

最佳答案

您也可以递归地删除子列表的“名称”,然后 unlist:

ff = function(x)
{
    if(is.list(x)) {
        names(x)[sapply(x, is.list)] = ""
        lapply(x, ff)
    } else return(x)
}
unlist(ff(my.list))
#a b c d e 
#1 2 3 4 5

在一个更嵌套的“列表”上:

my.list2 = list(a = 1, 
                li1 = list(b = 2, c = 3), 
                li2 = list(li2a = list(d = 4, e = 5), 
                           li2b = list(li2b1 = list(f = 6, g = 7), 
                                       li2b2 = list(h = 8),
                                       li2b3 = list(li2b3a = list(i = 9, j = 10, k = 11)))))

unlist(ff(my.list2))
# a  b  c  d  e  f  g  h  i  j  k 
# 1  2  3  4  5  6  7  8  9 10 11

关于r - 取消列出时防止元素重命名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39721604/

相关文章:

r - aov 和 t.test 提供不同的结果

python - 如何替换列表中除最后一项之外的所有项目

java - 带条件迭代两个列表

list - 如何在 Prolog 中 append 列表?

r - 增加内存限制后,lme 使 Rstudio 崩溃并且电脑无响应

正则表达式: "(^|)"与 "(|^)"

r - 在世界地图上叠加多个河图(桑基图)

python 3 : Flattening nested dictionaries and lists within dictionaries

python - 用 Python 列表中的值交换索引?

r - geom_violin() - 图形边框以一种奇怪的方式弯曲