Ошибка в применении (matt1, 2, медиана): dim (X) должен иметь положительную длину [дубликат]

У вас есть переменная, которая равна None, и вы пытаетесь получить доступ к атрибуту, который он назвал «something».

foo = None
foo.something = 1

или

foo = None
print foo.something

Оба даст AttributeError: 'NoneType'

2
задан John Fogg 27 May 2016 в 19:43
поделиться

1 ответ

Матрицы (см. ?matrix и более общие ?array) - это векторы, связанные между собой по строкам или столбцам.

m <- matrix(0, 2, 2)
m
      [,1] [,2]
[1,]    0    0
[2,]    0    0

Неудивительно, что m является matrix:

is.matrix(m)      # you can also try is.vector(m)
[1] TRUE

Но один столбец (или строка) больше не является matrix и в некотором роде мы «возвращаемся» к классу vector.

is.vector(m[, 1]) # you can also try is.matrix(m[, 1])
[1] TRUE

Таким образом, класс matrix «отбрасывается» при извлечении одной строки / столбца. Если вы хотите сохранить его, вы все равно можете:

m[, 1, drop=FALSE]

Это полезно, например. в тех случаях, когда вы хотите сохранить совместимость apply и когда количество выделенных строк / столбцов может быть длиной 1. Например, подмножество матрицы на основе условия или чего-то еще:

# this returns an error as m[, 1] is no longer a matrix
apply(m[, 1], 1, length)
Error in apply(m[, 1], 1, length) : dim(X) must have a positive length

# but this works like a charm
apply(m[, 1, drop=FALSE], 1, length)
[1] 1 1

Наконец , есть более мелкие классы векторов, называемые атомами (см. ?vector), и они возвращаются class:

class(m[, 1])
[1] "numeric"

class(m[, 1]>1)
[1] "logical"

И как видно выше:

class(m[, 1, drop=FALSE])
[1] "matrix"
2
ответ дан Vincent Bonhomme 15 August 2018 в 21:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: