Почему dim null для списков? - PullRequest
       4

Почему dim null для списков?

0 голосов
/ 12 октября 2019

Почему обычно возвращается dim null для списков? Кроме того, почему векторы не считаются одномерной матрицей, поскольку результат совпадает с Null с dim?

Вместо m * n, почему dim null в случае списков?

numbers<-c(1,2,1,1,2,3,1,1,1)
dim(numbers)<-c(3,3)    
dim( lapply(numbers[1,],sum))

dim (lapply (numbers [1,], sum)) NULL Поскольку существует 3 списка, почему это не 3 * 1?

1 Ответ

0 голосов
/ 12 октября 2019

Функция по умолчанию 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 автоматически обрабатывает векторы соответствующим образом, когда это делается, следуя обычным правилам линейной алгебры.

...