Я хочу динамически обновить формулу с вектором в R 4.0.0 или выше. То есть все так же, как по этой ссылке - R: Динамическое обновление формулы - но x теперь вектор, а версия R - >= 4.0. Короче говоря, у меня есть формула, например, y ~ 1, и я хотел бы обновить ее через символьный скаляр myvar1 или символьный вектор myvar2. Для символьных векторов и R версии >= 4.0.0 предложенное решение не работает. В примечании к выпуску 4.0.0 это упоминается как исправление ошибки. В примечании говорится, что "формула(x) с длиной(x) >1 символьных векторов теперь не используется. Такое использование было редким, и "работало" как ожидалось только в некоторых случаях. В других случаях неправильные x молча усекались, не обнаруживая предыдущих ошибок." (https://cran.r-project.org/doc/manuals/r-patched/NEWS.html)

myvar1 <- "x1"
myvar2 <- c("x1", "x2")
update(y ~ 1 , paste(" ~ . +", myvar1))
# y ~ x1
update(y ~ 1 , paste(" ~ . +", myvar2))
# y ~ x1
# Warning message:
# Using formula(x) is deprecated when x is a character vector of length > 1.
  Consider formula(paste(x, collapse = " ")) instead. 

Как мне обновить формулу с символьным вектором в R 4.0.0 и выше?

A.Fischer

Ответов: 2

Ответы (2)

Сейчас вам нужно манипулировать вашей строкой так, чтобы получить: "~ . + x1 + x2".

myvar2 <- c("x1", "x2")

formula_update <- paste(
  "~ . +",
  paste(myvar2, collapse = " + ")
)

formula_update 
[1] "~ . + x1 + x2"

update(y ~ 1, formula_update)
y ~ x1 + x2

Вы не могли бы рассмотреть

reformulate(myvar1, response="y")

приемлемая замена? (Она не делает точно то же самое, но может подойти.)

Вы также можете сделать свой update-аргумент формулой ...

update(y~1, reformulate(c(".",myvar1)))

2022 WebDevInsider