【发布时间】:2016-05-29 18:45:00
【问题描述】:
可以使用unlist(list, recursive = FALSE) 展平列表列表,如this 问题所示。此操作使用默认点 (.) 分隔符连接列表名称,这是 R 中变量命名的标准。一个简单的示例说明了这一点:
# Create example list, l
> l <- list("a" = list("x" = 1, "y" = 2), "b" = list("x" = 3, "y" = 4))
> l
$a
$a$x
[1] 1
$a$y
[1] 2
$b
$b$x
[1] 3
$b$y
[1] 4
# Unlist lists in l
> l.unlisted <- unlist(l, recursive = FALSE)
> l.unlisted
$a.x
[1] 1
$a.y
[1] 2
$b.x
[1] 3
$b.y
[1] 4
尽管有标准的命名约定,但我希望名称具有不同的分隔符 (_)。在unlist() 中已经发生一次连接后,可以使用sub 查找并替换每个名称中默认的. 分隔符,从而通过字符串操作来做到这一点,如下所示:
> names(l.unlisted) <- sub('.', '_', names(l.unlisted), fixed=TRUE)
> l.unlisted
$a_x
[1] 1
$a_y
[1] 2
$b_x
[1] 3
$b_y
[1] 4
虽然这在大多数情况下就足够了,但我认为可以通过更改 unlist() 使用的默认分隔符来消除额外的连接步骤。我假设这可以通过添加一个类似于paste() 中使用的sep 参数来更改使用fix() 的函数的源代码来完成。但是,我不知道该怎么做,因为unlist() 是一个内部函数。
有没有办法改变unlist() 中的默认名称连接分隔符,如何做到这一点?
【问题讨论】:
-
您不需要循环来执行此操作。
names(l.unlisted) <- sub('.', '_', names(l.unlisted), fixed=TRUE)应该改变它。 -
谢谢!编辑了有问题的原始两阶段解决方案,以向其他读者反映这一点。
标签: r list naming internal separator