最近,我一直在处理一些大型的,复杂的列表,并且看到了一些令人惊讶的行为(至少对我来说是令人惊讶的),主要是与为列表分配名称有关。一个简单的例子:
Fil <- list(
a = list(A=seq(1, 5, 1), B=rnorm(5), C=runif(5)),
b = list(A="Cat", B=c("Dog", "Bird"), C=list("Squirrel", "Cheetah", "Lion")),
c = list(A=rep(TRUE, 5), B=rep(FALSE, 5), C=rep(NA, 5)))
filList <- list()
for(i in 1:3){
filList[i] <- Fil[i]
names(filList)[i] <- names(Fil[i])
}
identical(Fil,filList)
[1] TRUE
但:
for(i in 1:3){
filList[i] <- Fil[i]
names(filList[i]) <- names(Fil[i])
}
identical(Fil,filList)
[1] FALSE
我认为它使我感到困惑的主要原因是,在第一个for循环中,第一个
names
行的左侧形式需要与右侧的形式有所不同;我本以为这些应该是相同的。有人可以向我解释一下吗? 最佳答案
第一种情况是正确的用法。在第二种情况下,您将filList[i]
发送到names<-
,该仅作为临时子集对象存在。
或者,您可以使用以下方法完成循环外的所有操作:
names(filList) <- names(Fil)
关于r - 在R中命名列表元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38643000/