Dear R-users, I was wondering for the following: Let 'x' be a matrix and 'ind' and indicator matrix, i.e., x <- array(1:20, dim = c(4, 5)) ind <- array(c(1:3, 3:1), dim = c(3, 2)) I'd like to get (as a vector) the elements of 'x' which are not indexed by 'ind'. Since negative indices are not allowed in index matrices I thought of using something like: x[ind] <- NA x[!is.na(x)] but are there any more elegant solutions. Thanks in advance, toka
Hi, you might not consider this more elegant, but how about this x[-apply(ind, 1, function(i) (i[1]-1)*nrow(x) + i[2])] Ben On 8/18/05, toka tokas <tokkass at yahoo.com> wrote:> Dear R-users, > > I was wondering for the following: > > Let 'x' be a matrix and 'ind' and indicator matrix, > i.e., > > x <- array(1:20, dim = c(4, 5)) > ind <- array(c(1:3, 3:1), dim = c(3, 2)) > > I'd like to get (as a vector) the elements of 'x' > which are not indexed by 'ind'. Since negative indices > are not allowed in index matrices I thought of using > something like: > > x[ind] <- NA > x[!is.na(x)] > > but are there any more elegant solutions. > > Thanks in advance, > toka > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html >
x <- array(1:20, dim = c(4, 5)) ind <- array(c(1:3, 3:1), dim = c(3, 2)) # instead of using ind (pairs of coordinates) for getting the items in the matrix, you can convert it to a list of single coordinates to point to the item in the matrix: # t = transpose # nrow = get the number of rows indices <- t((ind[,2]-1) * nrow(x) + ind[,1]) # remove the ones indicated by indices # to get an item from y you can do y[value] y <- x[-indices] # you could transpose y, but I don't know if that's what you want y <- t(y) Hope this helps, Martin --- toka tokas <tokkass at yahoo.com> wrote:> Dear R-users, > > I was wondering for the following: > > Let 'x' be a matrix and 'ind' and indicator matrix, > i.e., > > x <- array(1:20, dim = c(4, 5)) > ind <- array(c(1:3, 3:1), dim = c(3, 2)) > > I'd like to get (as a vector) the elements of 'x' > which are not indexed by 'ind'. Since negative > indices > are not allowed in index matrices I thought of using > something like: > > x[ind] <- NA > x[!is.na(x)] > > but are there any more elegant solutions. > > Thanks in advance, > toka