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

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


Both Oliver's and Chuck's code seem to work.  Thank you very much!! I will
keep working on this and might get back to the forum for more help if I get
stuck.  Thanks, really.

PS: Does any of you know why your replies don't show up in the main forum? I
get the message that the message hasn't been posted but all of you did get
it.  I'm subscribed to the list.  I followed all the instructions to do it,
but it still says that I cannot post on the forum... I'm confused 



Olivier ETERRADOSSI wrote:
> 
> Hi again Silvia (last time... ?),
> now : do I understand : you want 
> 1) to randomly select some intersections between rows and columns
> 2) randomly select a number of cases for each intersection (being <= the
> number of initial cases ?
> 
> if yes, here is my solution, using your example :
> 
> # select intersections, put them in new matrix mm
> mm<-m[sample(seq(1,5,by=1),2),sample(seq(1,5,by=1),3)]
> 
> # make a function that samples a number of cases
> foo<-function(x) sample(seq(1,x,by=1),1)
> 
> # use mapply
> mmm<-matrix(mapply(mm,FUN=foo),dim(mm)[1],dim(mm)[2])
> 
> On my computer it seems to work... hope this really help, this time !
> Regards. Olivier
> 
> 
> 
> 
> 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...
>> 
>> 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--tp23296664p23317153.html
Sent from the R help mailing list archive at Nabble.com.




More information about the R-help mailing list