2016-05-12 2 views
0

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

  • с использованием определенных пользователем переменных или,
  • , используя все переменные, присутствующие в dataframe.

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

функция, что у меня до сих пор это:

lmformula <- function (data, IndepVariable = character, VariableList = TRUE){ 
    if (VariableList) { 
newlist <- list() 
newlist <- # Here is where I do not exactly what to do to extract the variables defined by user 
DependVariables <- newlist 
f <- as.formula(paste(IndepVariable, "~", paste((DependVariables), collapse = '+'))) 
}else { 
names(data) <- make.names(colnames(data)) 
DependVariables <- names(data)[!colnames(data)%in% IndepVariable] 
f <- as.formula(paste(IndepVariable,"~", paste((DependVariables), collapse = '+'))) 
return (f) 
} 
} 

Пожалуйста, любой намек будет глубоко признателен

+1

Что-то вроде 'f <- as.formula (sprintf ("% s ~. ", DependentVariable)); lm (f, data = data [, Predictors]) '. Обратите внимание, что в регрессии на LHS есть зависимая переменная, а на RHS - предсказатели/независимые переменные. – Roland

+0

моя проблема с 'DependVariables'. Как получить переменные, заданные пользователем? То, что я хочу, - это запасать в 'DependVariables' список переменных, набранных пользователем – mina

ответ

2

Единственное, что изменения, как вы получите независимые переменные

Если пользователь указывает их, затем используйте этот вектор символов напрямую

Иначе, вы должны принять все, кроме зависимых переменной переменные (которые вы уже делаете)

Примечания: Как уже упоминалось Roland, формула, как dependentVariable ~ independentVariable1 + independentVariable2 + independentVariable3

# creating mock data 
data <- data.frame(col1 = numeric(0), col2 = numeric(0), col3 = numeric(0), col4 = numeric(0)) 

# the function 
lmformula <- function (data, DepVariable, IndepVariable, VariableList = TRUE) { 
    if (!VariableList) { 
    IndepVariable <- names(data)[!names(data) %in% DepVariable] 
    } 
    f <- as.formula(paste(DepVariable,"~", paste(IndepVariable, collapse = '+'))) 
    return (f) 
} 

# working examples 
lmformula(data = data, DepVariable = "col1", VariableList = FALSE) 
lmformula(data = data, DepVariable = "col1", IndepVariable = c("col2", "col3"), VariableList = TRUE) 

Надеется, что это помогает!

+0

Yeap! очень полезно Спасибо за наблюдение, я не понял, что использовал неправильную зависимую переменную – mina

+0

Встроенная функция 'reformulate()' предназначена для преобразования имен столбцов символов в формулу. 'f <-reformulate (IndepVariable, DepVariable)' – MrFlick

+0

И если вы хотите смоделировать одну переменную на всех остальных в data.frame, то вы можете использовать формулу 'resp ~ .' (период означает все остальное - no необходимо указать их все явно). – MrFlick

Смежные вопросы