Функция по умолчанию dim()
возвращает атрибут dim
объекта, который должен быть вектором целочисленных значений. Списки могут иметь атрибуты dim
, хотя обычно их нет. Например,
x <- array(as.list(1:10), c(5, 2))
dim(x)
# [1] 5 2
typeof(x)
# [1] "list"
typeof(x[1,1])
# [1] "list"
Обратите внимание, что dim()
внутренне является универсальной функцией, поэтому вы можете определить методы S3 для нее. Например,
x <- structure(1, class = "foobar")
dim.foobar <- function(x) 1:3
dim(x)
# [1] 1 2 3
Для фреймов данных вызывается метод dim.data.frame
.
Вы спросили, почему векторы не считаются одномерными матрицами. В обозначениях R матрицы всегда имеют 2 измерения;вещи с другими числами измерений являются массивами. Причина, по которой векторы не считаются одномерными массивами, заключается в том, что от них недостаточно выигрыша. Матрицы - это векторы с измерением, поэтому, если бы векторы были массивами, вам нужно отслеживать два измерения.
Однако, при умножении матрицы на вектор полезно, чтобы векторы считались либо строками, либоматрицы столбцов, то есть массивы с двумя измерениями, где одно измерение равно 1. R автоматически обрабатывает векторы соответствующим образом, когда это делается, следуя обычным правилам линейной алгебры.