Передать динамически переменные имена в формулу lm внутри функции - PullRequest
0 голосов
/ 27 апреля 2019

У меня есть функция, которая запрашивает два параметра:

  • dataRead (кадр данных от пользователя)
  • variableChosen (какая зависимая переменная пользователь хочет использовать в модели)

Переменная Obs: Indepent всегда будет первым столбцом

Но если пользователь дает мне, например, фрейм данных с именем dataGiven, имена столбцов которого: «Doses», «Weight» Iхочу, чтобы в моих результатах были имена моих моделей

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

    Results_REG<- function (dataRead, variableChosen){

      fit1 <- lm(formula = dataRead[,1]~dataRead[,variableChosen])

      return(fit1)
      }

Когда я звоню:

    test1 <- Results_REG(dataGive, "Weight")
    names(teste1$model)

показывает:

    "dataRead[, 1]"            "dataRead[, variableChosen]"

Я хотел показать имена столбцов моего информационного кадра, например:

    "Doses"            "Weight"

1 Ответ

0 голосов
/ 27 апреля 2019

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

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

Вот пример, основанный на mtcars

results_LM <- function(data, var) {
    lm(data[, 1] ~ data[, var])
}

results_LM(mtcars, "disp")
#Call:
#lm(formula = data[, 1] ~ data[, var])
#
#Coefficients:
#(Intercept)  data[, var]
#   29.59985     -0.04122

Вы можете подтвердить, что это даеттот же результат, что и

lm(mpg ~ disp, data = mtcars)

Или, возможно, вы спрашиваете, как перенести имена столбцов для предиктора?В этом случае мы можем использовать as.formula для построения формулы, которую мы используем вместе с аргументом data в lm.

results_LM <- function(data, var) {
    fm <- as.formula(paste(colnames(data)[1], "~", var))
    lm(fm, data = data)
}

fit <- results_LM(mtcars, "disp")
fit
#Call:
#lm(formula = fm, data = data)
#
#Coefficients:
#(Intercept)         disp
#   29.59985     -0.04122

names(fit$model)
#[1] "mpg"  "disp"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...