Матрица обрабатывается R как вектор с колонками и строками.
> A <- matrix(1:9, ncol=3)
# A is filled with 1,...,9 columnwise
> A
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
# only elements with even number in 2nd column of same row
> v <- A[A[,2] %% 2 == 0]
> m <- A[A[,2] %% 2 == 0,]
> v
[1] 1 3 4 6 7 9
> m
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 3 6 9
# The result of evaluating odd/even-ness of middle column.
# This boolean vector is repeated column-wise by default
# until all element's fate in A is determined.
> A[,2] %% 2 == 0
[1] TRUE FALSE TRUE
Когда вы выходите из запятой (v
), то вы обращаетесь A
как 1-мерная структура данных и R неявным обрабатывает ваше выражение в качестве вектора.
v в этом смысле не «целая цепочка», а вектор целых чисел. Когда вы добавляете запятую, вы указываете R, что ваше условие только присваивает первое измерение, указывая на второе (после запятой) - что заставляет R обрабатывать ваше выражение как матрицу (m
).
Все что вам нужно, это запятая. 'out [out [, 1]> out [, 2],]' –
@NealFultz: вы должны опубликовать это как ответ ... возможно, объясняя, зачем вам нужна запятая;) – nico