#r
#r
Вопрос:
Я новичок в R. Просматривая документацию R, я наткнулся на это предложение ?is.vector
: «Если mode = «any», is.vector может возвращать TRUE для атомарных режимов, списка и выражения».
Мне просто любопытно — почему? Во всей документации, которую я прочитал, говорится, что списки и векторы — это два разных типа данных. Есть ли какая-то более глубокая концепция типа данных R, которую я не понимаю?
Ответ №1:
Список (в большинстве случаев) сам по себе является вектором. Из файлов справки для ?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
для получения более подробной информации.
Комментарии:
1. Это объясняет, почему функция возвращает, почему она это делает. Это не объясняет, почему язык такой, каким он есть. У кого-нибудь есть идеи по этому поводу?
Ответ №2:
Смотрите раздел «R Внутренние структуры» (в частности, раздел 1.1.1) руководства по R внутренним устройствам. Список (в том смысле, о котором вы говорите) — это VECSXP
, тип вектора.
Комментарии:
1. @Quant Guy: Вам не нужно изучать внутренности, чтобы использовать R, но это полезно, если вы хотите «заглянуть под капот».