R中的重复列表名称

Meg*_*ron 11 dictionary r key list

当R中有重复的列表名称时,这里发生了什么?

l <- list()
l[["A"]] <- 5
l[["B"]] <- 7
l[["C"]] <- 9
names(l) <- c("B", "B", "C")
Run Code Online (Sandbox Code Playgroud)

打字l[["B"]]返回

$B
[1] 5
Run Code Online (Sandbox Code Playgroud)

打字l返回

$B
[1] 5

$B
[1] 7

$C
[1] 9
Run Code Online (Sandbox Code Playgroud)

是否有标准方法来检索"键""B"的所有值?

Ric*_*ven 13

当您有重复的名称并按名称调用子集时,仅返回第一个元素.事实上,[[无论如何只会给你一个元素,所以让我们来看看[.

l["B"]
# $B
# [1] 5
Run Code Online (Sandbox Code Playgroud)

我们还可以看到尝试c("B", "B")作为子集甚至不会给我们正确的结果,因为R返回并B再次获得第一个.

l[c("B", "B")]
# $B
# [1] 5
#
# $B
# [1] 5
Run Code Online (Sandbox Code Playgroud)

检索所有B元素的最安全方法之一是使用names()向量的逻辑子集.这将为我们提供正确的元素.

l[names(l) == "B"]
# $B
# [1] 5
#
# $B
# [1] 7
Run Code Online (Sandbox Code Playgroud)

这是为什么应该避免重复名称的一个很好的例子.