這是因爲您將長度爲1的矢量指定給NULL原子矢量。
從help(Extract)
-
當$<-
被施加到NULL x
,它首先脅迫x
到list()
。如果替換值value
的長度大於1,那麼[[<-
也會發生這種情況:如果value
具有長度1或0,x
首先被強制爲類型爲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在評論中提到的,僅僅是開始與空原子向量,看看會發生什麼。
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; a'與'b = NULL'相比較; b [[「lev1」]] = 1;這可能會更清楚。由於'[[< - 「'既用於原子矢量也用於泛型矢量,因此R無法知道'NULL'應該成爲什麼,並且假設一個簡單的場景。 –