2016-09-06 19 views
0

반복되는 샘플링 값 (예 : A, B, A)을 가질 수 있지만 순차적 (A, A, B) 일 수는 없으며 하나만 반환 할 수 있습니까? 단일 값 (A, A, A) 또는 (B, B, B). 아래 코드는 항상 최소한 두 개의 값을 제공해야하지만 반환 값이 순서대로 없길 원합니다.샘플링 값이 순차적이 아님

x<- 3 
alphabet <- LETTERS[seq(1:26)] 
a <- sample(alphabet, 2, replace = FALSE) 
b <- sample(a, x, replace = TRUE, prob=c(0.5,0.5)) #can't replace 
print(b) 

답변

2

거부 ​​샘플링을 사용할 수 있습니다. 그리기가 허용되는지 확인하고 그렇지 않은 경우 다시 그립니다. 당신은 시퀀스의 길이를 확인하는 rle를 사용할 수 있습니다

a <- sample(letters, 3, replace=TRUE) 
while(any(rle(a)$lengths > 1)) a <- sample(letters, 3, replace=TRUE); 

size = 3를 들어, 당신은 아마 한 번 또는 두 번 이상 그릴 필요가 없습니다; 더 긴 시퀀스의 경우 더 정교한 것을 원할 수 있습니다.

+0

안녕하세요, 닐이 생각했던 것입니다. 나는 대신 아래의 방법을 사용했다. 그것을하는 더 우아한 방법이있는 경우에, 나는 그것을 중대하게 평가할 것입니다. – Sam

0

이 코드는 내 필요에 맞도록 제작되었습니다. 여기서 나는 설명하려고 노력할 것이다.

# sample 2 letters without replacement. 
# The sample letter will always be different. 
a <- sample(LETTERS, 2, replace = FALSE) 

# sample 3 times randomly. 
b <- sample(a, 3, replace=TRUE) 

# Reject sampling and repeat again if all the sampled values are the same. 
# b %in% b[duplicated(b)]) return duplicated as TRUE, non duplicated as FALSE 
# sort(unique(b %in% b[duplicated(b)])) returns only TRUE if the sample result consists of 1 sampled value. Keep doing that unless returns FALSE in the first position. 

while(sort(unique(b %in% b[duplicated(b)]))[1] == TRUE){ 
    b <- sample(a, x, replace=TRUE); 
} 
b 
+0

감사합니다! 나는 그 설명을 적었다. 나는 그것이 옳기를 바란다. – Sam