Bir vektörün eşleşen alt dizelerinin başlangıç bildirimlerini döndüren bir işlevi kullanmak istiyorum. Örneğin:Daha büyük bir vektörde bir dizinin eşleştirilmesi
y <- c("a","a","a","b","c")
multi_match(c("a","a"), y)
# [1] 1 2
multi_match(c("a","b"), y)
# [1] 3
ben zor bir uygulama var, ama tekerleği yeniden gerekir gibi hissediyorum, ve biraz aksak var. Bunu uygulamak için daha iyi bir yol var mı, yoksa benzer işlevselliğe sahip bir yerde önceden var olan bir işlev var mı?
multi_match <- function(x, table){
# returns initial indicies of all substrings in table which match x
if(length(table) < length(x)){
return(NA)
}else{
check_mat <- matrix(nrow = length(x), ncol = length(table))
for(i in 1:length(x)){
check_mat[i,] <- table %in% x[i]
}
out <- vector(length = length(table))
for(i in 1:(length(table)-(length(x)-1))){
check <- vector(length=length(x))
for(j in 1:length(x)){
check[j] <- check_mat[j,(i+(j-1))]
}
out[i] <- all(check)
}
if(length(which(out))==0){
return(NA)
}else{
return(which(out))
}
}
}
BioConductor paketinde 'BioStrings' işlevselliği eşleşen dize çok şey var, bu çalışmasına rağmen ' dizgiler ', yani sahip olduğunuz vektörler yerine' uzunluk 1 'karakter vektörleri. http://www.bioconductor.org/packages/2.12/bioc/html/Biostrings.html –