Превратить строку символов в объект формулы в базе R - PullRequest
1 голос
/ 21 марта 2020

Мне было интересно, есть ли способ превратить строку символов, такую ​​как "time", в объект formula, такой как time ~ 1 в BASE R ?

Примечание: Под formula я имею в виду то, что использовалось в lm().

Вот что я пытался без успеха:

a = "time"

formula(bquote(.(noquote(a)))~1)

# Desired output a formula object:

time ~ 1

1 Ответ

3 голосов
/ 21 марта 2020

Использование reformulate

a <- "time"
reformulate("1", a)
## time ~ 1

Это также работает:

formula(paste(a, "~ 1"))
## time ~ 1

lm

Обратите внимание, что lm может принимать символьную строку вместо формулы таким образом, нам на самом деле не нужно преобразовывать строку в формулу (за исключением того, что к формуле присоединено окружение, поэтому в некоторых случаях это может иметь значение, хотя часто это не так). Ниже ch можно было бы склеить из кусочков. Оба приведенных ниже примера lm работают, но в первом он будет отображать буквально Call: lm(formula = ch, data = BOD) в выходных данных, тогда как последний будет отображать фактическую формулу Call: lm(formula = "demand ~ Time", data = BOD) в выходных данных.

ch <- "demand ~ Time"

lm(ch, BOD)
do.call("lm", list(ch, quote(BOD))) 
...