Преобразования полосы из формулы

У меня есть модельная формула, включающая преобразования, некоторые из которых могут быть вложенными. Я хочу удалить все преобразования из формулы, оставив только необработанные переменные.

E.g.,

log10(y) ~ sin(log10(x)) + log(x1)

станет:

y ~ x + x1

Я предполагаю, что это можно было бы сделать с помощью регулярных выражений, но я хочу знать, существует ли ранее существовавшая функция или где-то хранятся необработанные имена переменных (например, terms), из которых можно восстановить формулу. Если нет, то, возможно, кто-то может помочь с регулярным выражением в случаях с вложенностью...?

К сожалению, невозможно преобразовать переменные вне формулы.

Очень признателен.


person jslefche    schedule 02.03.2016    source источник


Ответы (1)


Существует функция all.vars для извлечения переменных из формул.

all.vars( log10(y) ~ sin(log10(x)) + log(x1) )
# [1] "y"  "x"  "x1"
person A. Webb    schedule 02.03.2016
comment
Если v является результатом all.vars(...), используйте: formula(paste(v[1], "~", paste(v[-1], collapse = " + "))) - person G. Grothendieck; 02.03.2016
comment
@ G.Grothendieck или reformulate(v[1],v[-1]) (делает то же самое, но я думаю, что более ясно, каково намерение) - person MrFlick; 02.03.2016
comment
Будет ли all.vars возвращаться в том же порядке, что и формула модели? Если да, то идеальное решение! Не могу поверить, что я не подумал об этом! - person jslefche; 02.03.2016
comment
Вы также можете посмотреть lapply(attr(terms(f,keep.order=TRUE),'variables'),all.vars) - person A. Webb; 02.03.2016