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.