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

Silvia Lomascolo slomascolo at gmail.com
Thu Apr 30 16:16:19 CEST 2009


Thank you! This seems to work!!!

Silvia.



Charles C. Berry wrote:
> 
> 
> See below
> 
> On Wed, 29 Apr 2009, Silvia Lomascolo 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...
>>
> 
> If I understand you,
> 
>> m.index <- 1:length(m)
>> # sample all 1287:
>> new.m <- matrix(table( factor( sample(rep(m.index,m),1287), m.index
>> )),nr=5)
>> all.equal(m, new.m) # verify that original was reproduced
> [1] TRUE
>> # now sample just 800
>> new.m <- matrix(table( factor( sample(rep(m.index,m),800), m.index 
> )),nr=5)
>> m-new.m # look at the difference
> 
> Chuck
> 
> 
>> 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.
>>
> 
> Charles C. Berry                            (858) 534-2098
>                                              Dept of Family/Preventive
> Medicine
> E mailto:cberry at tajo.ucsd.edu	            UC San Diego
> http://famprevmed.ucsd.edu/faculty/cberry/  La Jolla, San Diego 92093-0901
> 
> ______________________________________________
> 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.
> 
> 

-- 
View this message in context: http://www.nabble.com/How-do-I-sample-%22cases%22-within-a-matrix--tp23296664p23317180.html
Sent from the R help mailing list archive at Nabble.com.




More information about the R-help mailing list