web-dev-qa-db-ja.com

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行の左側の形式が、右側の形式と異なる必要があるためです。これらは同じであるはずだと思っていました。誰かがこれを私に説明してくれませんか?

24
RobertMyles

最初のケースは正しい使い方です。 2番目のケースでは、filList[i]からnames<-は、一時的なサブセットオブジェクトとしてのみ存在します。

または、次のようにしてループの外ですべてを実行することもできます。

names(filList) <- names(Fil)
29
James