# [R] extract a subset of non-contiguous elements of a matrix

Bart Kastermans kasterma at kasterma.net
Thu Jun 19 13:29:09 CEST 2014

```On 19 Jun 2014, at 13:19, carol white <wht_crl at yahoo.com> wrote:

> Hi,
> Is there a way to extract a subset of non-contiguous elements of a matrix elegantly and with 1 or very few scripts?
>
> Suppose I have a matrix of positive and negative numbers (m) and I want to retrieve only the positive number. This I can do
>
> which(m>0, arr.ind=T) which gives the indices of positive elements like (37,1), (80,1), ..., (54,2) etc. How can I extract positive numbers without looping on the indexes provided by which to make a new matrix?

What matrix do you want?  For e.g.

> tm.1 <- matrix(c(11,22,33,-4), ncol=2)
> which(tm.1 > 0, arr.ind=TRUE)
row col
[1,]   1   1
[2,]   2   1
[3,]   1   2
> tm.1[which(tm.1 > 0, arr.ind=TRUE)]
[1] 11 22 33

The extracted values do not form a matrix.

Either the above contains the answer, or I don’t understand the question.

Best,
Bart

>
> thanks,
>
> Carol

```