में अनुक्रम मिलान करना मैं एक ऐसा कार्य करना चाहता हूं जो एक वेक्टर के मिलान के शुरुआती इंडस्ट्रीज को लौटाता है। उदाहरण के लिए:एक बड़े वेक्टर
y <- c("a","a","a","b","c")
multi_match(c("a","a"), y)
# [1] 1 2
multi_match(c("a","b"), y)
# [1] 3
मैं एक मोटा कार्यान्वयन है, लेकिन मुझे लगता है कि मैं पहिया पुनर्रचना जाना चाहिए, और यह एक छोटे भद्दा है। क्या इसे कार्यान्वित करने का कोई बेहतर तरीका है, या क्या समान कार्यक्षमता वाले कहीं पूर्व-मौजूदा कार्य है?
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 पैकेज 'BioStrings' में कार्यक्षमता मिलान तार का एक बहुत कुछ है, हालांकि इस के साथ काम करता है ' स्ट्रिंग्स ', यानी आपके पास वैक्टरों की बजाय' लंबाई 1 का चरित्र वैक्टर '। http://www.bioconductor.org/packages/2.12/bioc/html/Biostrings.html –