В настоящее время я пытаюсь ускорить вложенный оператор if else, который выбирает модель на основе параметра.Функция ниже получает входные данные от предыдущей функции в форме аргумента «модель».Аргумент модели может быть «glm», «логарифмический» или «квадрат».В настоящее время это выполняется с помощью вложенного оператора if, else if, else if.Я попытался сформулировать это как два утверждения ifelse, и мои тесты не показывают увеличения производительности.Моя программа должна делать это много раз для множества различных наборов данных, поэтому любое увеличение производительности будет огромным.
Я пробую случай с dpylr, но никогда не использовал его, я не уверен, что это уместно, какие-либо предложения?
код ниже дает мне следующее;Ошибка: должен быть в списке, а не в lm
Отредактирован для добавления образцов данных и предыдущей функции для воспроизводимости
data <- sample(1000)
df <- data.frame(data)
df[2] <- sample(1000)
names(df) <- c(y,x)
#previous function
produce_model <- function(model,df){
if (model=="glm")
{
model<-lm(y~x,df)
}
else if (model=="logarithmic")
{
model<-lm(log(y)~x,df)
}
else if (model=="squared")
{
model<-lm(y^2~x,df)
}
return(model)
}
#Trying to improve with case_when()
library(dplyr)
produce_model <- function(model,df) {
case_when(
model == 'glm' ~ lm(y~x,df=df),
model == 'logarithmic' ~ lm(log(y)~x,df=df),
model == 'squared' ~ lm(y^2~x,df=df)
)
return(model)
}