каталог - это вектор символов с разными значениями. Он имеет следующую структуру
value name location companybrand
1111 ikea boston nike
1234 7/11 new york marlboro
1456 walmart new york marlboro
листинг содержит все города США -> Чикаго, Бостон, Нью-Йорк, Лос-Анджелес и еще одну колонку с полными названиями брендов.
Location Brand
New York, 5th Avenue Coca Cola LTD
New York, 51 Str Nike Corporation
New York, Broadway Marlboro Incorporated
if (sum(grepl(paste("\\b", as.character(location), "\\b", sep = ""), catalog$value[i], fixed = FALSE)) > 0 &&
sum(grepl(paste("\\b", as.character(companybrand), "\\b", sep = ""), catalog$value[i], fixed = FALSE)) > 0){
subdata <- subset(listing, listing$local == as.character(location[which(grepl(paste("\\b", as.character(location), "\\b", sep = ""), catalog$value[i], fixed = FALSE)]) && listing$commercial == as.character(companybrand[which(grepl(paste("\\b", as.character(companybrand), "\\b", sep = ""), catalog$value[i], fixed = FALSE))]))
}
Как видите, я пытаюсь запустить функцию grepl, используя несколько шаблонов, которая возвращает следующую ошибку:
Warning message:
In grepl(paste("\\b", distmunicipality, "\\b", sep = ""), ctlg$distvalor[i], :
argument 'pattern' has length > 1 and only the first element will be used
Я читал в других сообщениях, что подходящим решением для этого является свертывание всех проверяемых шаблонов в одну строку с разделителями каналов, как показано ниже:
companybrand <- paste(companybrand, collapse = "|")
location <- paste(location, collapse = "|")
который отлично работает для небольших векторов, но в моем случае у меня есть 4 миллиона элементов в бренде компании, что приводит к завершению работы R из-за нехватки памяти. Есть ли практический способ сделать это (возможно, используя sapply), чтобы запустить этот матч, не требуя вычислительных затрат?