[R] Newbie: Matrix indexing
Gabor Grothendieck
ggrothendieck at myway.com
Tue Mar 22 14:35:52 CET 2005
Pascal BLEUYARD <p.bleuyard <at> opgc.univ-bpclermont.fr> writes:
:
: Hi all,
:
: I need to compute some "occurence matrix": given a zero matrix and a set
: of paired indexes, I want to store the number of occurences of each paired
: index in a matrix. The paired indexes are stores as an index matrix. I
: prefere not to use loops for performances purpose.
:
: Here follows a dummy example:
:
: > occurence <- matrix(0, 2, 2); data
: [,1] [,2]
: [1,] 0 0
: [2,] 0 0
: >
: > index <- matrix(1, 3, 2); index
: [,1] [,2]
: [1,] 1 1
: [2,] 1 1
: [3,] 1 1
: >
: > occurence[index] <- occurence[index] + 1
:
: I was expecting the folowing result:
:
: > occurence
: [,1] [,2]
: [1,] 3 0
: [2,] 0 0
:
: I get instead:
:
: > occurence
: [,1] [,2]
: [1,] 1 0
: [2,] 0 0
:
: I guess that there is some "hidden copy" involved but I wanted to know if
: there is an efficient workaround (not using some loop structure). I thought
: "factors" could do the job but I didn't manage to use them for that problem.
Turn your index matrix into a data frame so you can use lapply on it.
Then convert each of the two columns to a two-level factor. Now you
can use table on the result:
table(lapply(as.data.frame(index), factor, lev = 1:2))
More information about the R-help
mailing list