2014-04-21 14 views

cevap

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

değil ama Eğer değişkenlerin sadece isimlerini almak isterseniz, Öte yandan

> 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" 

formülü el deparse olabilir: o yararlı olabilir

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" 

Bu size

all.vars(f1) 
## [1] "y" "x1" "x2" "x3" "x4" 
all.vars(f2) 
## [1] "y" "x1" "x2" "x3" "x5" "x4" 

hemen hemen aynı sonucu verir ama formül nesne üzerinde bazı ilginç bilgilere erişmek için nasıl bir ipucu sağlar.

+1

Ve muhtemelen sadece sabit olmayan terimleri grep'leyebilirdiniz. –

2

Benzersiz terimleri, sabit olmayan terimleri kaldırmak için grep'u kullanarak alabileceğimiz anlaşılıyor. unique(ft) sonucu özgü sabit terimler gösterilir hemf1 ve

> 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

Bu cevabı bildiririm ama günlük limitime ulaştım. :) – gagolews

1

Bunu yapmanın en kolay yolu lme4 paketini kullanmaktır f2:

# 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 

Ve bunu ancak herhangi bir kod ile yapabilir! :-)

İlgili konular