У меня есть две следующие функции:
name_fitting <- function(term1, term2)
{
if (nchar(term1) <= 3)
{
temp <- substring(term2, 1,nchar(term1))
return(temp==term1)
}
else {return(grepl(term1, term2))}
}
name_matching <- function(name1, name2)
{
name1 <- gsub('[[:punct:]]+','', name1)
name2 <- gsub('[[:punct:]]+','', name2)
if (length(intersect(as.character(unlist(strsplit(name1, ' '))), as.character(unlist(strsplit(name2, ' '))))) > 1) {return(TRUE)}
if (length(intersect(as.character(unlist(strsplit(name1, ' '))), as.character(unlist(strsplit(name2, ' '))))) == 1)
{
non_matching <- union(setdiff(as.character(unlist(strsplit(name1, ' '))), as.character(unlist(strsplit(name2, ' ')))), setdiff(as.character(unlist(strsplit(name2, ' '))), as.character(unlist(strsplit(name1, ' ')))))
temp <- outer(X = non_matching, Y = non_matching, FUN = 'name_fitting')
diag(temp)<-FALSE
return(any(temp))
}
else(return(FALSE))
}
name_fitting используется в name_matching. name_matching проверяет совместимость двух имен, переданных функции, и возвращает TRUE или FALSE.
Когда я пытаюсь сопоставить два имени следующим образом:
name1<-"MARCO BRAMBILLA"
name2<-"M BRAMBILLA BRANDUARDI"
Я получаю следующее предупреждение:
условие имеет длину> 1, и будет использоваться только первый элемент
Указывает, что внешняя функция неправильно передает данные в name_fitting.
Как я могу это исправить?