dimanche 28 février 2016

How can I tell a for loop in R to regenerate a sample if the sample contains a certain pair of species?

I am creating 1000 random communities (vectors) from a species pool of 128 with certain operations applied to the community and stored in a new vector. For simplicity, I have been practicing writing code using 10 random communities from a species pool of 20. The problem is that there are a couple of pairs of species such that if one of the pairs is generated in the random community, I need that community to be thrown out and a new one regenerated. I have been able to code that if the pair is found in a community for that community(vector) to be labeled NA. I also know how to tell the loop to skip that vector using the "next" command. But with both of these options, I do not get all of the communities that I needing.

Here is my code using the NA option, but again that ends up shorting me communities.

C<-c(1:20)
D<-numeric(10)
X<- numeric(5)
for(i in 1:10){
  X<-sample(C, size=5, replace = FALSE)
  if("10" %in% X & "11" %in% X) X=NA else X=X
  if("1" %in% X & "2" %in% X) X=NA else X=X
  print(X)
  D[i]<-sum(X)
  }
print(D)

This is what my result looks like.

[1]  5  1  7  3 14
[1] 20  8  3 18 17
[1] NA
[1] NA
[1] 4 7 1 5 3
[1] 16  1 11  3 12
[1] 14  3  8 10 15
[1]  7  6 18  3 17
[1]  6  5  7  3 20
[1] 16 14 17  7  9
> print(D)
 [1] 30 66 NA NA 20 43 50 51 41 63

Thanks so much!

Aucun commentaire:

Enregistrer un commentaire