2014-10-01 2 views
1

У меня есть список функций, и я хотел бы, чтобы выбрать один из них пользовательского ввода, используйте его для регрессии, а затем отобразить вывод функции резюме и участка ,Выберите функцию с помощью пользовательского ввода

re_show<-function(y){ 
     f1<-x+I(x^2) 
     f2<-I(x^0.5)+I(x^2) 
     ... 
     f20<-x+I(x^0.5)+I(x^2) 

     message("Choose the model") 
     i <- readLines(n = 1) 
     summary(lm(y~i)) 
     plot(lm(y~i)) 
     } 

Есть ли у вас какие-либо идеи о том, как решить эту проблему? Спасибо.

+0

Попытка создать формулу в виде строки chracter первым, а затем преобразовать в формулу (предполагая, что пользовательский ввод определяет правую часть уравнения модели): 'формулы (паста («Y ~», я, sep = "")) ' – SimonG

+0

@Ndr, вы хотите, чтобы пользователь указал функцию f (например, f1, f2 и т. д.) или переменную? Если первый, 'switch' является хорошим вариантом. – cdeterman

ответ

1

Ну вот наиболее обобщенный ответ, который я могу предоставить для вашей функции. Я изменил его, чтобы принять зависимую переменную, независимую переменную и набор данных. Если вам не нравится этот параметр, вы всегда можете установить параметры по умолчанию или изменить функцию на ваш конкретный сценарий. Эта функция, в ее нынешнем виде, позволит вам использовать любой набор данных, который вы хотите (без данных образца). Я также добавил оператор switch, чтобы пользователь мог выбрать, какую модель использовать для stdin. Простой пример показан с набором данных iris.

re_show<-function(dv, iv, dat){ 

    # Define your variables to evaluate 
    x <- dat[,iv] 
    y <- dat[,dv] 

    # choose the function 
    message("Choose the model") 
    fun <- readLines(n = 1) 

    # The switch statement 
    i <- switch(fun, 
       f1 = {x+I(x^2)}, 
       f2 = {I(x^0.5)+I(x^2)}, 
       # add your remaining functions 
       f20 = {x+I(x^0.5)+I(x^2)} 
) 

    # finish your analysis 
    print(summary(lm(y~i))) 
    plot(lm(y~i)) 
} 

data(iris) 
re_show("Sepal.Length", "Sepal.Width", iris) 
Смежные вопросы