Я ищу совет о том, как повысить эффективность длинного цикла if / else в моем скрипте r.Я также рассчитываю на то, чтобы это было как можно больше в будущем, поскольку сфера его действия со временем может измениться.
Справочная информация
Используя устаревший код с другого языка, я автоматизирую отчетностьпроцесс для большого проекта.В этом проекте у меня есть несколько «Центров» для создания отчетов на основе подмножеств базы данных.Прямо сейчас я выполняю это, используя длинный цикл выборки, подобный показанному ниже:
df$ReportName <- 0
df$new_centername[is.na(df$new_centername)] <- 0
for (i in 1:nrow(df)){
if (df$new_centername[i] == 1){
df$ReportName[i] <- "Center A"
} else if (df$new_centername[i] == 2){
df$ReportName[i] <- "Center B"
} else if (df$new_centername[i] == 3){
df$ReportName[i] <- "Center C"
} else if (df$new_centername[i] == 4){
df$ReportName[i] <- "Center D"
} else if (df$new_centername[i] == 5){
df$ReportName[i] <- "Center E"
} else if (df$new_centername[i] == 6){
df$ReportName[i] <- "Center F"
}
...
df
- общий фрейм данных, new_centername
обозначает, к какому центру относится строка данных, все из которых кодируются численно.
Со временем я ожидаю, что к этому будет добавлено больше Центров.Я предполагаю, что есть способ сохранить эти Центры в списке, а затем создать цикл, который перебирает список.Таким образом, по мере добавления новых Центров мне нужно только добавить их имя в список.
Редактировать:
- "Центр __" - это только заполнитель, которым можно поделиться здесь, фактические названия центров сильно различаются.
- Числовой идентификатор также не следует прямолинейному шаблону.
Предлагаемое решение:
SampleList <- list("Center A", "Center B", "Center C", ...)
for (i in 1:nrow(df)){
for (j in 1:length(SampleList)){
if (df$new_centername[i] == 1){
df$ReportName[i] <- SampleList[j]
}
}
}
Помогите обернуть мою голову наилучшей и подходящей логикойСинтаксис для оптимизации приветствуется! Спасибо