[R] [FORGED] Re: Extract entries from matrix
Rolf Turner
r.turner at auckland.ac.nz
Tue Oct 27 22:07:25 CET 2015
Maybe it's just me --- I'm notoriously slow --- but I haven't a clue
what you are trying to do. You said:
"... the idea is to extract the diagonal elements until a
zero is found."
I don't see anything that resembles a "diagonal element" (*entry*,
actually; sets have elements, arrays have entries) in your desired
output. What do you mean by the diagonal of a non-square matrix anyway?
cheers,
Rolf Turner
--
Technical Editor ANZJS
Department of Statistics
University of Auckland
Phone: +64-9-373-7599 ext. 88276
8/10/15 08:43, Jorge I Velez wrote:
> Dear Jim,
>
> Thank you very much for your quick reply.
>
> I am sorry for the confusion it may have caused, but I messed up the
> indexes in my example. I would like, from the following matrix "m"
>
> ## input
> m <- structure(c(0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L,
> 0L, 0L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 0L, 0L, 0L, 3L, 3L,
> 3L, 3L, 3L, 3L, 3L, 3L, 3L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 4L,
> 4L, 4L, 4L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 5L, 5L), .Dim = c(12L,
> 5L))
>
> to obtain
>
> 1 2 3 1 2 3 4 5 1
>
> Sure using m[idx] will give the desired result. The problem is that idx is
> not known and needs to be determined from "m". I would like to use
> something like
>
> extractDiagonals(m)
> ## [1] 1 2 3 1 2 3 4 5 1
>
> I look forward to your reply. Thanks in advance.
>
> Best regards,
> Jorge Velez.-
>
>
>
> On Tue, Oct 27, 2015 at 2:31 PM, jim holtman <jholtman at gmail.com> wrote:
>
>> If you want to use the numbers you gave a the index into the matrix, then
>> you can create a matrix with the values and then index into 'm'. I don't
>> see a '4' in the output example you gave using your index values:
>>
>>> m <- structure(c(0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
>> + 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 2L, 2L, 2L, 2L,
>> + 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 0L,
>> + 0L, 0L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
>> + 3L, 3L, 3L, 3L, 3L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 4L, 4L, 4L,
>> + 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 0L, 0L, 0L, 0L, 0L,
>> + 0L, 0L, 0L, 0L, 0L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
>> + 5L), .Dim = c(22L, 5L))
>>> # create index matrix
>>> indx <- matrix(c(4, 1,
>> + 5, 2,
>> + 6, 3,
>> + 7, 1,
>> + 8, 2,
>> + 9, 3,
>> + 10, 1,
>> + 11, 2,
>> + 12, 3), ncol = 2, byrow = TRUE)
>>>
>>>
>>> m
>> [,1] [,2] [,3] [,4] [,5]
>> [1,] 0 0 0 0 0
>> [2,] 0 0 0 0 0
>> [3,] 0 0 0 0 0
>> [4,] 1 2 3 0 0
>> [5,] 1 2 3 0 0
>> [6,] 1 2 3 0 0
>> [7,] 1 2 3 0 0
>> [8,] 1 2 3 0 0
>> [9,] 1 2 3 4 0
>> [10,] 1 2 3 4 0
>> [11,] 1 2 3 4 5
>> [12,] 1 2 3 4 5
>> [13,] 1 2 3 4 5
>> [14,] 1 2 3 4 5
>> [15,] 1 2 3 4 5
>> [16,] 1 2 3 4 5
>> [17,] 1 2 3 4 5
>> [18,] 1 2 3 4 5
>> [19,] 1 2 3 4 5
>> [20,] 1 2 3 4 5
>> [21,] 1 2 3 4 5
>> [22,] 1 2 3 4 5
>>> indx
>> [,1] [,2]
>> [1,] 4 1
>> [2,] 5 2
>> [3,] 6 3
>> [4,] 7 1
>> [5,] 8 2
>> [6,] 9 3
>> [7,] 10 1
>> [8,] 11 2
>> [9,] 12 3
>>> m[indx]
>> [1] 1 2 3 1 2 3 1 2 3
>>
>>
>> Jim Holtman
>> Data Munger Guru
>>
>> What is the problem that you are trying to solve?
>> Tell me what you want to do, not how you want to do it.
>>
>> On Tue, Oct 27, 2015 at 2:43 PM, Jorge I Velez <jorgeivanvelez at gmail.com>
>> wrote:
>>
>>> Dear R-help,
>>>
>>> I am working with a matrix "m" from which I would like to extract some
>>> elements. An toy example is as follows:
>>>
>>> ## input matrix
>>> m <- structure(c(0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
>>> 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 2L, 2L, 2L, 2L,
>>> 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 0L,
>>> 0L, 0L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
>>> 3L, 3L, 3L, 3L, 3L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 4L, 4L, 4L,
>>> 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 0L, 0L, 0L, 0L, 0L,
>>> 0L, 0L, 0L, 0L, 0L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
>>> 5L), .Dim = c(22L, 5L))
>>>
>>> R> m
>>> # [,1] [,2] [,3] [,4] [,5]
>>> # [1,] 0 0 0 0 0
>>> # [2,] 0 0 0 0 0
>>> # [3,] 0 0 0 0 0
>>> # [4,] 1 2 3 0 0
>>> # [5,] 1 2 3 0 0
>>> # [6,] 1 2 3 0 0
>>> # [7,] 1 2 3 0 0
>>> # [8,] 1 2 3 0 0
>>> # [9,] 1 2 3 4 0
>>> # [10,] 1 2 3 4 0
>>> # [11,] 1 2 3 4 5
>>> # [12,] 1 2 3 4 5
>>>
>>> >From "m", I would like to extract the entries
>>>
>>> 4, 1
>>> 5, 2
>>> 6, 3
>>> 7, 1
>>> 8, 2
>>> 9, 3
>>> 10, 1
>>> 11, 2
>>> 12, 3
>>>
>>> so at the end of applying a function "f" to "m" I get
>>>
>>> 1, 2, 3, 1, 2, 3, 4, 1, 2, 3
>>>
>>>
>>> Basically the idea is to extract the diagonal elements until a zero is
>>> found.
>>>
>>> In the real problem the dimensions of "m" are much bigger, but this
>>> smaller
>>> version of "m" illustrate what needs to be done.
>>>
>>> I would greatly appreciate any ideas on how to do this.
>>>
>>> Thanks in advance.
More information about the R-help
mailing list