host <- c("A","B","C","D")
guest <- c("D","C","A","F")
matchIndices <- function(x,y) {
return(match(x,y))
}
Один (неэффективный) способ - это sapply
над вектором host
, передавая guest
в качестве аргумента (обратите внимание, вы могли бы просто упростить это до sapply(host, match, guest)
, но это иллюстрирует общий подход к такого рода вещь):
> sapply(host, matchIndices, guest)
A B C D
3 NA 2 1
Однако это можно сделать напрямую , используя match
, так как он принимает первый аргумент вектора:
> match(host, guest)
[1] 3 NA 2 1
Если вы хотите именованный вектор в качестве вывода,
> matched <- match(host, guest)
> names(matched) <- host
> matched
A B C D
3 NA 2 1
который может быть включен в функцию
matchIndices2 <- function(x, y) {
matched <- match(x, y)
names(matched) <- x
return(matched)
}
возвращение
> matchIndices2(host, guest)
A B C D
3 NA 2 1
Если вы действительно хотите, чтобы имена и совпадения были объединены в вектор строк, то:
> paste(match(host, guest), host, sep = ";")
[1] "3;A" "NA;B" "2;C" "1;D"