2014-04-21 11 views

Trả lời

4
library(lme4) 
f1.fixed <- terms(lme4:::nobars(f1)) 
attr(f1.fixed, "term.labels") 
#[1] "x1" "x2" "x4" "x1:x4" 
4

Đâ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.

+1

Và bạn có thể chỉ cần 'grep' ra các cụm từ không cố định. –

2

Có vẻ như chúng tôi có thể nhận các điều khoản duy nhất bằng cách sử dụng grep để xóa các cụm từ không cố định. Kết quả của unique(ft) cho thấy các điều khoản cố định mà là duy nhất cho cảf1f2

> ft <- unlist(lapply(c(f1, f2), function(x){ 
     grep("\\|", attr(terms(x), "term.labels"), invert = TRUE, value = TRUE) 
    })) 
> unique(ft) 
## [1] "x1" "x2" "x4" "x1:x4" 
+0

Tôi sẽ upvote câu trả lời này nhưng tôi đạt đến giới hạn hàng ngày của tôi. :) – gagolews

1

Cách đơn giản nhất để làm điều này là sử dụng lme4 gói:

# require(lme4) 
f1 <- formula(y~x1+x2+(1|x3)+x1*x4) 
f2 <- formula(y~x1+x2+(1|x3+(0+x5|x3))+x1*x4) 

# extracting random terms 
findbars(f1); findbars(f2) 

# [[1]] 
# 1 | x3 
# [[1]] 
# 1 | x3 + (0 + x5 | x3) 

# extracting fixed terms 
nobars(f1); nobars(f2) 

# y ~ x1 + x2 + x1 * x4 
# y ~ x1 + x2 + x1 * x4 

Và bạn có thể làm điều này với hầu như không có mã nào! :-)

Các vấn đề liên quan