Подтвердить что ты не робот

Почему is.vector() возвращает TRUE для списка?

Я начинающий R. Просмотрев документацию R, я наткнулся на это предложение ?is.vector: "Если mode =" any ", is.vector может возвращать TRUE для атомных режимов, списка и выражения."

Мне просто интересно - почему? Вся документация, которую я прочитал, гласит, что списки и векторы представляют собой два разных типа данных. Есть ли какая-то более глубокая концепция типа данных R, которую я не получаю?

4b9b3361

Ответ 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, тип вектора.