Я пытаюсь стандартизировать данную строку, используя определенный набор правил.Эти правила были формализованы с использованием нескольких операций «gsub», которые хранятся во фрейме данных (но при этом они называются атомарным вектором с использованием $) в виде простого текста.
У меня есть 4 отдельных фрейма данных, заполненных строками, которые я хочу стандартизировать.Я реализовал цикл for, который работает, однако, он включает в себя переписывание операций gsub для каждого фрейма данных и довольно трудоемкий для запуска.
Хотя я знаю, что apply не обеспечивает никакого реального ускорения по сравнению с циклом for, если не вызывается скомпилированная функция, мне нужен абстрагированный метод для выполнения этой стандартизации над несколькими фреймами данных (как тамбудет больше в будущем).
Чтобы добиться этого обобщения, я попытался написать вложенную структуру apply.Я оцениваю операции gsub в вызове функции из apply, используя "eval (parse (text = x))".Я хочу повторить этот вызов apply для элементов фрейма данных со строками, сохраненными для стандартизации, поэтому применяется более высокий вложенный метод.
Я ожидаю, что команда apply зацикливается на всех операциях и применяет их последовательно к строке, все время циклически перебирая сам фрейм данных строки.Тем не менее, это явно не работает.Он выдает:
library(data.table)
library(stringi)
repdf <- data.table(Names = c("Palmolive Co. Pvt. Ltd.","Hellenic P. Co.","Freeman's Consortium pvt. ltd."),Address =c("15, Parkway Broadsite, Mumbai","Greco-Roman Architecture Street, Pune","1-B,Black Mesa Compound, Crowbar Street, Delhi."))
gsubop_df <- data.table(Commands = c('"stri_replace_all_regex(x, "Co\\b\\.?","Company")"','"stri_replace_all_regex(x, "\\(P\\.\\)$","Private Limited")"','"stri_replace_all_regex(x, "Corpn\\b\\.?","Corporation")"'))
repdf$Names <- apply(repdf[,1],2,function(x) apply(gsubop_df,2,eval(parse(text = as.character(x)))))
#> Error in parse(text = as.character(x)): <text>:1:11: unexpected symbol
#> 1: Palmolive Co.
#>
Как я уже говорил, я написал цикл for, который работает:
name_rule_length <- length(name_clean_rules_apply$Commands)
for(i in 1:nrow(mh_rules_nme)){
MG$Name <- eval(parse(text= mh_rules_nme[i,]))
}
Пример операции gsub в mh_rules_nme:
stri_replace_all_regex(MG$Name,"M(?:\\|\\/)s","")
Это, однако, требует от меня переписать операцию gsub для каждого фрейма данных, в то время как я стремлюсь к достижению той же функции, используя общий "x" изнутри apply.
Однако, когда я делаю атомарный eval (анализ), он работает нормально.Однако в циклической операции выдается эта ошибка.
Любая помощь в решении этого очень ценится.