[R] How do I sample "cases" within a matrix?

jim holtman jholtman at gmail.com
Wed Apr 29 19:54:02 CEST 2009


If you just want to shuffle the row around, this should do it.  By
limiting the number of samples, you can get a smaller matrix:

> pla<- c(10, 9, 6, 5, 3) #abundance of pla species
> pol<- c(14, 10, 9, 4, 2) #abundance of pol species
> m<-pla%*%t(pol) #matrix of interactions
> m[sample(nrow(m)),]
     [,1] [,2] [,3] [,4] [,5]
[1,]  126   90   81   36   18
[2,]   42   30   27   12    6
[3,]   70   50   45   20   10
[4,]   84   60   54   24   12
[5,]  140  100   90   40   20
> m
     [,1] [,2] [,3] [,4] [,5]
[1,]  140  100   90   40   20
[2,]  126   90   81   36   18
[3,]   84   60   54   24   12
[4,]   70   50   45   20   10
[5,]   42   30   27   12    6
>


On Wed, Apr 29, 2009 at 1:36 PM, Silvia Lomascolo <slomascolo at gmail.com> wrote:
>
> Hi R community,
> I am trying to obtain a sample from a matrix but sample(my.matrix) doesn't
> do what I need. I have a matrix of 1287 interactions between the species in
> columns and the species in rows and I want to obtain a smaller matrix with
> say, 800 interactions, that may or may not have the same number of columns
> and/or rows (i.e., some interactions may not be retrieved in a smaller
> sample). For example, my original mock matrix M is
>
>
>     [,1] [,2] [,3] [,4] [,5]
> [1,]  140  100   90   40   20
> [2,]  126   90   81   36   18
> [3,]   84   60   54   24   12
> [4,]   70   50   45   20   10
> [5,]   42   30   27   12    6
>
> The command sample(my.matrix) samples whole cells from my matrix, such that
> if the interaction between species 1 and 1 is included in the sample, they
> always show 140 interactions.  But what I want is to sample "cases" within
> each cell.  My sample matrix S could have =<140 interactions between species
> 1 and 1, =<100 between species 1 and 2, etc. Again, if some combination is
> absent from the sample matrix, that's OK.
>
> Here's my code, in case it helps:
>
> pla<- c(10, 9, 6, 5, 3) #abundance of pla species
> pol<- c(14, 10, 9, 4, 2) #abundance of pol species
> m<-pla%*%t(pol) #matrix of interactions according to pla and pol abundance
> m
>     [,1] [,2] [,3] [,4] [,5]
> [1,]  140  100   90   40   20
> [2,]  126   90   81   36   18
> [3,]   84   60   54   24   12
> [4,]   70   50   45   20   10
> [5,]   42   30   27   12    6
>
> sample(m) #doesn't give me what I want...
>
> I have searched the forum for an answer but all questions regarding sampling
> from matrices refer to sampling whole rows or columns, not "cases" within a
> matrix.
> Thanks in advance for any help! Silvia.
> --
> View this message in context: http://www.nabble.com/How-do-I-sample-%22cases%22-within-a-matrix--tp23296664p23296664.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> R-help at 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.
>



-- 
Jim Holtman
Cincinnati, OH
+1 513 646 9390

What is the problem that you are trying to solve?




More information about the R-help mailing list