これは予期される動作です。オブジェクトの要素のインデックスに割り当てると、要素が存在しない場合、R は要素を作成します。あなたの例では、「dimnames」は に存在しないaa
ため、R は、割り当てているものに基づいて「dimnames」を作成しようとします。リストの「a」、「b」、および「c」という名前の要素を割り当てることを検討してください。
> L <- list()
> L$a[[1]] <- 5
> L$b[[3]] <- "foo"
> L$c[[4]] <- c(1,2,3)
> class(L$a)
[1] "numeric"
> class(L$b)
[1] "character"
> class(L$c)
[1] "list"
さて、言うことの問題L$a[[1]] <- anything
は、それL$a
がまだ存在しないということです。要素が存在しない場合、R は機能する最も単純なタイプの要素を作成するだけです。ご覧のとおり、が数値ベクトルのL$a[[1]] <- 5
場合は意味L$a
があるので、R はそれを数値ベクトルにします。が数値ベクトルのL$b[[3]] <- "foo"
場合は意味がありませんが、 が文字ベクトルの場合は意味があるため、R はそれを作成します。ただし、がリストの場合にのみ発生する可能性があるため、その場合はリストを取得します。L$b
L$b
L$c[[4]] <- c(1,2,3)
L$c
あなたの場合、dimnames
そのルールに従って作成しようとします。リストを作成しますが、文字ベクトルdimnames(aa)
のみを作成します。dimnames(bb)
ただしdimnames
、リストでなければならないという追加の制約があるため、オブジェクトがオブジェクトになり、エラーが発生します。