Почему is.vector() возвращает TRUE для списка?
Я начинающий R. Просмотрев документацию R, я наткнулся на это предложение ?is.vector
:
"Если mode =" any ", is.vector может возвращать TRUE для атомных режимов, списка и выражения."
Мне просто интересно - почему? Вся документация, которую я прочитал, гласит, что списки и векторы представляют собой два разных типа данных. Есть ли какая-то более глубокая концепция типа данных R, которую я не получаю?
Ответы
Ответ 1
Список (в большинстве случаев) представляет собой вектор. Из файлов справки для ?list
: "Большинство списков в R внутренне являются Generic Vectors, тогда как традиционные списки точек пунктирной пары (как в LISP) доступны, но редко видны пользователям (кроме формальных функций)."
Это означает, что вы можете использовать vector
для предварительного выделения памяти для списка:
x <- vector("list", 3)
class(x)
[1] "list"
Теперь выделите значение для второго элемента в списке:
x[[2]] <- 1:5
x
[[1]]
NULL
[[2]]
[1] 1 2 3 4 5
[[3]]
NULL
Подробнее см. ?list
и ?vector
.
Ответ 2
Смотрите раздел R Internal Structures (в частности, раздел 1.1.1) Internals. Список (в том смысле, о котором вы говорите) представляет собой VECSXP
, тип вектора.