Tôi muốn có một hàm trả về các chỉ báo ban đầu của các chuỗi tương ứng của một vectơ. Ví dụ:So khớp một chuỗi trong một vector lớn hơn
y <- c("a","a","a","b","c")
multi_match(c("a","a"), y)
# [1] 1 2
multi_match(c("a","b"), y)
# [1] 3
Tôi có triển khai thô, nhưng tôi cảm thấy như tôi phải phát minh lại bánh xe và hơi khó chịu. Có cách nào tốt hơn để thực hiện điều này, hoặc là có một chức năng có sẵn ở đâu đó với chức năng tương tự?
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))
}
}
}
Có rất nhiều các chuỗi phù hợp với chức năng trong gói BioConductor 'BioStrings', mặc dù điều này làm việc với' chuỗi ', tức là' vectơ ký tự có chiều dài 1 ', chứ không phải là vectơ bạn có. http://www.bioconductor.org/packages/2.12/bioc/html/Biostrings.html –