gpt4 book ai didi

r - 如何处理多个列表元素同名的可能性

转载 作者:行者123 更新时间:2023-12-02 07:48:44 30 4
gpt4 key购买 nike

我刚刚注意到可以构造多个元素具有相同名称的列表,例如:

l <- list(a=1, a="a")

当使用元素名称提取列表元素时,将返回与名称匹配的第一个元素:l$a 返回1,而不会发出警告。

我通常按名称提取列表元素。现在我担心我会意外地创建具有相同名称的多个元素的列表(例如通过尝试通过公共(public)索引合并列表),访问错误的列表元素,并且永远不知道存在问题。

每次使用列表时,我都可以测试它是否有多个同名元素:

length(unique(names(l)))==length(names(l))

...但这很麻烦。有没有更好的方法来处理这个潜在的问题?

最佳答案

并不是说我完全推荐这个,但是这里有一个可能不太麻烦的方法来确保您不会从包含重复名称的列表中提取元素:

## Define a method for `[[` that first checks the list x for repeated names
`[[.CC` <- function(x,i,j,...,exact=TRUE) {
if(!length(unique(names(x))) == length(names(x))) {
stop("List contains multiple elements with the same name")
} else {
NextMethod()
}
}

## Write a function that prepends the class that triggers the method above
CC <- function(X) {
class(X) <- c("CC", class(X))
X
}

## Try it out
l <- list(a=1, a="a")
m <- list(a=1, b="a")

CC(l)[["a"]]
# Error in `[[.CC`(CC(l), "a") :
# List contains multiple elements with the same name

CC(m)[["a"]]
# [1] 1

关于r - 如何处理多个列表元素同名的可能性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13808558/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com