[R] Syntax question: assigning sparse matrix elements

2009-06-11 Thread Dan Ruderman

Hopefully this is straightfoward.

I have an matrix which is mostly zeroes.  I want to assign it
some non-zero elements whose rows, columns, and values I know.

As a simple example, say I create a 3x2 matrix of zeros:
 m - matrix(rep(0,6),nrow=3)

Now say I want to make the [1,1] and [3,2] elements of this
matrix be non-zer, so I create two vectors, one for rows and one for cols:
 rows - c(1,3)
 cols - c(1,2)

And I have two values to be put in these locations:
 vals - c(-1,1)

What I'd like to do is something like:
 m[rows,cols] - vals

But what I get instead is:

 m
 [,1] [,2]
[1,]   -1   -1
[2,]00
[3,]11


What I hoped to see is:

 m
 [,1] [,2]
[1,]   -10
[2,]00
[3,]01


If anyone can offer some advice I'd be most thankful.

Regards
Dan

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] Syntax question: assigning sparse matrix elements

2009-06-11 Thread Duncan Murdoch

On 6/11/2009 12:34 PM, Dan Ruderman wrote:

Hopefully this is straightfoward.

I have an matrix which is mostly zeroes.  I want to assign it
some non-zero elements whose rows, columns, and values I know.

As a simple example, say I create a 3x2 matrix of zeros:

m - matrix(rep(0,6),nrow=3)


Now say I want to make the [1,1] and [3,2] elements of this
matrix be non-zer, so I create two vectors, one for rows and one for cols:

rows - c(1,3)
cols - c(1,2)


And I have two values to be put in these locations:

vals - c(-1,1)


What I'd like to do is something like:

m[rows,cols] - vals


But what I get instead is:


m

 [,1] [,2]
[1,]   -1   -1
[2,]00
[3,]11


What I hoped to see is:


m

 [,1] [,2]
[1,]   -10
[2,]00
[3,]01


If anyone can offer some advice I'd be most thankful.


If the index to a matrix is a two column matrix, then the first column 
is taken to be a row number, the second a column number.  So you get 
what you want with


m[cbind(rows,cols)] - vals

This is discussed (and other indexing methods too) in the R Language 
Definition manual in the section on indexing matrices and arrays.


Duncan Murdoch

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.