сохранить возвращенную матрицу после индексации как вектор - PullRequest
0 голосов
/ 27 мая 2019

Я следовал учебному пособию https://www.datamentor.io/r-programming/matrix/ о языке R о том, как сохранить возвращенную матрицу после индексации матрицы, а не вектора. Однако это не работает, и класс возвращаемой матрицы все еще является вектором

Я пытался использовать одну запятую, затем две запятые, как это было показано в учебнике.

[1] 3 6 9
> class(x[x%%3==0])
[1] "integer"
> x[x%%3==0, drop=FALSE]
[1] 3 6 9
> class(x[x%%3==0, drop=FALSE])
[1] "integer"
> x[x%%3==0,, drop=FALSE]
Error in x[x%%3 == 0, , drop = FALSE] : 
  (subscript) logical subscript too long
> x[x%%3==0,,.drop=FALSE]
Error in x[x%%3 == 0, , .drop = FALSE] : incorrect number of dimensions
> x[x%%3==0,,drop=FALSE]
Error in x[x%%3 == 0, , drop = FALSE] : 
  (subscript) logical subscript too long
> class(x[x%%3==0, drop=FALSE])
[1] "integer"

Класс по-прежнему целочисленный, а не матрица, что и должно делать drop = FALSE

1 Ответ

0 голосов
/ 27 мая 2019

Вывод

x %% 3==0
#     A     B     C
#X FALSE FALSE FALSE
#Y FALSE FALSE FALSE
#Z  TRUE  TRUE  TRUE

представляет собой логическую матрицу

Поднабор исходной матрицы с использованием логической матрицы дает элементы, основанные на позиции TRUE

which(x%%3 == 0)
#[1] 3 6 9

Это те же значения в matrix, которые мы получили при извлечении, и это не делает различий между строками, например

x > 3
#     A    B    C
#X FALSE TRUE TRUE
#Y FALSE TRUE TRUE
#Z FALSE TRUE TRUE

x[x > 3]
#[1] 4 5 6 7 8 9

Чтобы извлечь строку как таковую, нам может потребоваться получитьлогический векторОдин из вариантов - rowSums и сравнение с количеством столбцов

x[rowSums(x %%3 == 0) == ncol(x),, drop = FALSE]
#  A B C
#Z 3 6 9

data

x <- matrix(1:9, nrow = 3, dimnames = list(c("X","Y","Z"), c("A","B","C")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...