Структурирование аргументов функции x & y, которые работают как по формуле (y ~ x), так и по отдельности - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь создать функцию, которая запускает переменные x и y через логистическую регрессию, а затем позже использует только переменные x для создания дерева решений.(Между ними будут и другие аргументы, но они на самом деле не имеют значения.)

Вот пример:

  myfunction <- function(x.vars, y.var, dat, method) {
  if (method == 1) {
  lr1 <-
  glm(
  x.vars, y.var,
  data = dat,
  family = "binomial"
  )

  ## I then use these results to come up with "some.other.variable"

  tree1 <-
  rpart(
  some.other.variable ~ x.vars,
  data = dat
  )

  # plot tree
  library(rpart.plot)
  rpart.plot(tree1)
  }

  else{...}
}

Когда я пытаюсь запустить вектор переменных x через этофункция, я получаю эту ошибку:

Ошибка в form.default (eval (parse (text = x, keep.source = FALSE) [[1L]])): неверная формула

IЯ предполагаю, что эта ошибка связана с тем, что rpart принимает только аргумент «формула» (в отличие от подключения переменных x & y отдельно), и что просто передается вектор имен переменных, как я делаю в some.other.variable ~ x.vars isnне правильный путь.Я не уверен, как заставить это в правильный формат, все же.

Буду признателен за любую помощь!

1 Ответ

0 голосов
/ 20 октября 2018

Я заставил его работать, требуя, чтобы переменные x были матрицей или фреймом данных, а затем создали новый фрейм данных внутри функции.Затем я написал формулу как «у ~».чтобы избежать необходимости выяснять, как поставить «+» между каждой из переменных (хотя я полагаю, я мог бы вызвать их расположение в новом фрейме данных).Я также использовал каретку для построения дерева.Возможно, есть лучшие способы сделать это, но это сработало.

  myfunction <- function(x.vars, y.var, dat, method) {
  if (method == 1) {
  new.dat <- as.data.frame(cbind(y.var, x.vars))
  names(new.dat)[1] <- "y"
  lr1 <-
  glm(y ~ .,
  data = new.dat,
  family = "binomial"
  )

  ## I then use these results to come up with "some.other.variable"
  library(caret)
  tree1 <- train(x = x.vars, y = new.variable, method = "rpart", trControl = trControl)
  )

  # plot tree
  library(rpart.plot)
  rpart.plot(tree1)
  }

  else{...}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...