Отделение переменных от формулы

#r #dplyr

#r #dplyr

Вопрос:

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

 print(fo)
"count_new ~ sno   winter_dummy   spring_dummy  autumn_dummy "
  

РЕДАКТИРОВАТЬ
это пример вывода, который я ищу

 iner<- c("hour","dewp","humid","wind_dir","wind_speed")
  

Комментарии:

1. Пожалуйста, не могли бы вы пояснить, что вы подразумеваете под «разделением формулы». Что вы ожидаете в качестве выходных данных?

2. Возможно, вы захотите проверить библиотеку insight и функции, подобные find_predictors (даже если они применяются к объекту модели, но не к формуле)

3. Может быть: trimws(unlist(strsplit(fo, "[~ ]")))

4. Почему fo и iner не совпадают? Можете ли вы показать свой ожидаемый результат на основе fo ?

Ответ №1:

Вы ищете что-то подобное?

 get_vars <- function(x) { 
  x <- strsplit(x, " |~|\ |\*")[[1]]; 
  as.list(x[nzchar(x)][-1])
}
  

Чтобы вы могли сделать

 get_vars(fo)
#> [[1]]
#> [1] "sno"
#> 
#> [[2]]
#> [1] "winter_dummy"
#> 
#> [[3]]
#> [1] "spring_dummy"
#> 
#> [[4]]
#> [1] "autumn_dummy"

  

Комментарии:

1. Спасибо! это может сработать, но мне это нужно как список и без основной переменной

2. @Stat. С энтузиазмом смотрите мое обновление. Это то, что вы имеете в виду? Вы говорите, что хотите получить вывод в виде списка, так что это то, что я сделал. Однако в вашем вопросе вы показываете, что вам нужен вектор, который у меня был изначально. Можете ли вы уточнить?

Ответ №2:

Вот простой способ с использованием метода terms.formula .

 rhs <- function(x){
  if(!inherits(x, "formula")) x <- as.formula(x)
  attr(terms(x), "term.labels")
}

fo <- "count_new ~ sno   winter_dummy   spring_dummy  autumn_dummy "
rhs(fo)
#[1] "sno"          "winter_dummy" "spring_dummy" "autumn_dummy"
  

Ответ №3:

В краткой форме:

 fo <- "count_new ~ sno   winter_dummy   spring_dummy  autumn_dummy "

labels(terms(as.formula(fo)))
#> [1] "sno"          "winter_dummy" "spring_dummy" "autumn_dummy"
  

Создано 2020-10-02 пакетом reprex (версия 0.3.0)