Đây không phải là chính xác những gì bạn đang tìm kiếm, nhưng nó có thể hữu ích:
> 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"
Mặt khác, nếu bạn muốn chỉ nhận tên biến, bạn có thể làm thô công thức theo cách thủ công:
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"
này cung cấp cho bạn hầu hết các kết quả tương tự như
all.vars(f1)
## [1] "y" "x1" "x2" "x3" "x4"
all.vars(f2)
## [1] "y" "x1" "x2" "x3" "x5" "x4"
nhưng cung cấp cho bạn một gợi ý về cách truy cập một số thông tin thú vị về đối tượng công thức.
Và bạn có thể chỉ cần 'grep' ra các cụm từ không cố định. –