これは、NULL原子ベクトルに長さ1のベクトルを割り当てるために発生しています。
$<-
がNULL x
に適用する場合、それは最初list()
からx
を強制 - help(Extract)
から
。置換値value
の長さが1より大きい場合、[[<-
の場合も同様です。value
の長さが1または0の場合は、value
の長さゼロのベクトルに最初に強制的に変換されます。
割り当てを... <- 1:2
(または長さ0または1のベクトル以外)に変更すると、両方のコードブロックで同じ結果が得られます。
list1 <- list()
lev1 <- "level1"
lev2 <- "level2"
list1[[lev1]][[lev2]] <- 1:2
list1
# $level1
# $level1$level2
# [1] 1 2
list2 <- list()
list2$level1$level2 <- 1:2
list2
# $level1
# $level1$level2
# [1] 1 2
本のシンプルな例、コメントで@alexis_lazで述べたように、単にNULL原子ベクターで始まり、何が起こるかを見ることです。
x <- NULL
## assign a length 1 vector --> atomic result
x[["lev1"]] <- 1
x
# lev1
# 1
y <- NULL
## assign a length > 1 vector --> list result
y[["lev1"]] <- 1:2
y
# $lev1
# [1] 1 2
$<-
からの結果は常にので、私はそれをここでは省略しているリストです。
同様の簡単なケースでは、 'a = NULL; $ lev1 = 1; b = NULLと比較してa = b [["lev1"]] = 1;これはより明確になるかもしれない。 '' [''は ''アトミックとジェネリックの両方のベクトルに使われているので、 '' NULL''がどうなるべきかを知ることはできません。 –