2012-05-03 5 views
1

Если у меня есть вектор буквы:Использования списка выборки в качестве шаблонов для отбора проб из большого списка без оберточных

> all <- letters 
> all 
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z" 

, а затем я определяю эталонный образец из письма следующим образом:

> refSample <- c("j","l","m","s") 

, в котором расстояние между элементами равно 2 (от 1-го по 2-й), 1 (от 2-го до 3-го) и 6 (от 3-го до 4-го), как я могу выбрать n образцы от all, которые имеют одинаковые, без обертывания расстояние между его элементами до refSample? Например, "a","c","d","j" и "q" "s" "t" "z" будут действительными образцами, но "a","c","d","k" и "r" "t" "u" "a" не будут. Первая имеет разность индексов 7 (а не 6) между третьим и последним элементами, тогда как последняя имеет правильный интервал, но обтекает.

Во-вторых, как я могу параметризовать это, так что независимо от того, что используется refSample, я могу использовать интервал этого как шаблон?

ответ

3

Вот простой способ -

all <- letters                                                                 
refSample <- c("j","l","m","s")                                                            


pick_matches <- function(n, ref, full) {                                                          
    iref <- match(ref,full)                                                              
    spaces <- diff(iref)                                                               
    tot_space <- sum(spaces)                                                              
    max_start <- length(full) - tot_space                                                          
    starts <- sample(1:max_start, n, replace = TRUE)                                                        
    return(sapply(starts, function(s) full[ cumsum(c(s, spaces)) ]))                                                   
}                                                                    

> set.seed(1)                                                                 
> pick_matches(5, refSample, all) # each COLUMN is a desired sample vector                                                           
     [,1] [,2] [,3] [,4] [,5]                                                             
[1,] "e" "g" "j" "p" "d"                                                             
[2,] "g" "i" "l" "r" "f"                                                             
[3,] "h" "j" "m" "s" "g"                                                             
[4,] "n" "p" "s" "y" "m"   
Смежные вопросы