У вас есть переменная, которая равна None, и вы пытаетесь получить доступ к атрибуту, который он назвал «something».
foo = None
foo.something = 1
или
foo = None
print foo.something
Оба даст AttributeError: 'NoneType'
Матрицы (см. ?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"