R 中的命名列表元素

Naming list elements in R

我最近一直在处理一些大型、复杂的列表,我看到了一些令人惊讶的行为(至少对我来说是这样),主要是与为列表分配名称有关。一个简单的例子:

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)