индексирование списка с помощью [[vs [и NULL] - PullRequest
2 голосов
/ 01 мая 2020

Если я создаю список

mylist = list()
mylist[1] <- "test"

[[ возвращает:

mylist[[1]]
# [1] "test"

[ возвращает:

mylist[1]
# [[1]]
# [1] "test"

Но в случай, когда

mylist = list()

почему

mylist[1]

Результат

[[1]]
NULL

Но

mylist[[1]] 

Не возвращает NULL это - возвращает ошибку?

Error in mylist[[1]] : subscript out of bounds

1 Ответ

1 голос
/ 01 мая 2020

Предположим, у нас есть list как:

mylist  = list()
mylist[[1]] = c(1,2,3)
mylist[[2]] = c(4,5,6)

В концепции списка мы можем сказать, что mylist имеет два слоя, к которым может получить доступ [[, и элемент доступен [ like:

mylist[[1]][2]  

В вашем случае mylist не имеет слоя, поэтому, когда вы делаете mylist[1] R, по умолчанию обращаетесь к первому слою и говорите, что в первом слое mylist нет элементов и возвращает NULL, но когда вы делаете mylist[[1]] R говорит Out of Bounds, потому что был вызван первый слой mylist, а слоя вообще нет. Вот почему R выдает ошибку в [[ случае.

...