Hello,

It is pretty basic, and it is deceptively simple. The worst of all :)
When you index a matrix 'x' by another matrix 'z' the index can be a logical matrix of the same dimensions or recyclable to the dims of 'x', it can be a matrix with only two columns, a row numbers column and a column numbers one, or your case.

In your case, 'z' is coerced to vector, and the values in 'z' are taken to be indexes to 'x'. But since you only have two distinct values and one of them is zero, it will only return x[1] three times (there are three 1s in 'z'). The same goes for 'y'.

Correct:

# Create an index matrix
z.inx <- which(z == 1, arr.ind = TRUE)
z.inx

# Test
x1 <- x2 <- x3 <- x # Use copies to test
x1[z == 1] <- y[z == 1]
x2[z.inx] <- y[z.inx]
# 1 and 0 to T/F
x3[as.logical(z)] <- y[as.logical(z)]

x1
identical(x1, x2)
identical(x1, x3)


Hope this helps,

Rui Barradas

Em 23-09-2012 21:52, Bazman76 escreveu:
x<-matrix(c(1,0,0,0,1,0,0,0,1),nrow=3)
y<-matrix(c(0,0,0,1,0,0,1,1,0),nrow=3)
z<-matrix(c(0,1,0,0,1,0,1,0,0),nrow=3)
x[z]<-y[z]
The resultant matrix x is all zeros except for the last two diagonal cells
which are 1's.
While y is lower triangualr 0's with the remaining cells all ones.

I really don't understand how this deceptively simple looking piece of code
is giving that result can someone explain please.
I'm obviously missing something pretty basic so please keep your answer
suitably basic.



--
View this message in context: 
http://r.789695.n4.nabble.com/Confused-by-code-tp4643946.html
Sent from the R help mailing list archive at Nabble.com.

______________________________________________
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.

______________________________________________
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.

Reply via email to