#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)