Попытка ускорить вложенность, если еще при выборе модели - PullRequest
0 голосов
/ 16 октября 2018

В настоящее время я пытаюсь ускорить вложенный оператор 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)
        }
...