To nie jest dokładnie to, czego szukasz, ale może to być przydatne:
> attr(terms(f1),"term.labels")
[1] "x1" "x2" "1 | x3" "x4" "x1:x4"
> attr(terms(f2),"term.labels")
[1] "x1" "x2" "1 | x3 + (0 + x5 | x3)"
[4] "x4" "x1:x4"
z drugiej strony, jeśli chcesz dostać tylko nazwy zmiennych, można deparse wzór ręcznie:
reclapply <- function(x) {
if (is.name(x)) as.character(x)
else if (is.atomic(x)) NULL # ignore
else lapply(2:length(x), # omit function name - 1st element
function(i) reclapply(x[[i]]))
}
unique(unlist(reclapply(f1[[3]])))
## [1] "x1" "x2" "x3" "x4"
unique(unlist(reclapply(f2[[3]])))
## [1] "x1" "x2" "x3" "x5" "x4"
To daje prawie taki sam wynik jak
all.vars(f1)
## [1] "y" "x1" "x2" "x3" "x4"
all.vars(f2)
## [1] "y" "x1" "x2" "x3" "x5" "x4"
ale zapewnia Ci podpowiedź, w jaki sposób uzyskać dostęp do kilka ciekawych informacji na obiekcie formuły.
Możliwe, że po prostu "grep" nie będzie ustalonych warunków. –