Почему is.vector () возвращает TRUE для списка? - PullRequest
24 голосов
/ 17 мая 2011

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

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

Ответы [ 2 ]

15 голосов
/ 17 мая 2011

Список - это (в большинстве случаев) сам вектор.Из файлов справки для ?list: "Большинство внутренних списков в R являются общими векторами, тогда как традиционные списки с точечными парами (как в 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.

11 голосов
/ 17 мая 2011

См. Раздел R Внутренние конструкции (в частности, раздел 1.1.1) руководства R Internals .Список (в том смысле, о котором вы говорите) - это VECSXP, тип вектора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...