我最近一直在做一些大型复杂列表的工作,我看到一些令人惊讶的行为(至少对我来说),主要是为列表分配名称.一个简单的例子:
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
Run Code Online (Sandbox Code Playgroud)
但:
for(i in 1:3){
filList[i] <- Fil[i]
names(filList[i]) <- names(Fil[i])
}
identical(Fil,filList)
[1] FALSE
Run Code Online (Sandbox Code Playgroud)
我认为它让我困惑的主要原因是因为第names
一个for循环中第一行左侧的形式需要与右侧的左侧不同才能工作; 我原以为这些应该是一样的.有人可以向我解释一下吗?
Jam*_*mes 25
第一种情况是正确的用法.在要发送的第二壳体filList[i]
到names<-
其只存在作为临时子集化对象.
或者,您可以在循环外执行以下操作:
names(filList) <- names(Fil)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
54440 次 |
最近记录: |