2016-07-20 11 views
2

Ich bin in ein bizarres Scoping (vielleicht?) Problem ... Das MWE unten ruft RunSamples, druckt die Variable , dann wirft einen Fehler in der nächsten Zeile, die besagt, dass nicht existiert. Ich kann nicht verstehen, warum die Druckfunktion die Variable finden und drucken kann, aber lmer kann nicht. Jede Hilfe wäre willkommen. Außerdem, wenn ich das pr Argument zu prot ändern, läuft der Code gut.Variable nicht gefunden; Scoping Problem

require(lme4) 
dat <-data.frame(value=1:10,Item=1:10,Protocol=rep(c("FFT","Data"),5)) 
RunSamples <- function(dat,form,pr) { 
    rets <- list() 
    print(pr) 
    rets$Full <- lmer(update.formula(form,.~.),data=dat, subset= Protocol==pr) 
    return(rets) 
} 
RunFullMain <- function(prot="CLASS") { 
    ret <- list() 

    form <- value~0+Item 
    ret$Item <- RunSamples(dat=dat,form=form ,prot) 
    return(ret) 
} 

Results <- list() 
for (pp in c("FFT","CLASS","PLATO")) { 
    Results[[pp]] <- RunFullMain(pp) 
} 

Antwort

0

Ich bin nicht sicher, ob ich dieses Problem beheben kann, im Sinne von es einfach Arbeit zu haben, aber ich glaube, ich kann erklären, was los ist und gibt Ihnen eine angemessene Abhilfe.

lmer macht eine Vielzahl von (wahrscheinlich übermäßig) komplizierte Dinge zu versuchen, die Daten zu bewerten und sicherzustellen, dass alle Variablen in der Formel vorhanden sind vorhanden sind. Es versucht, alle Variablen im Argument data mitzunehmen, und diejenigen, die in der Umgebung der Formel vorhanden sind, aber darüber hinaus hat es Probleme. Das proximale Problem hier ist, dass Ihre subset Aufruf bezieht sich auf eine Variable, die nicht in einer dieser Orte existiert. Die einfache Abhilfe ist, die subset Funktion anstelle des subset Argument zu verwenden:

RunSamples <- function(dat,form,pr) { 
    rets <- list() 
    rets$Full <- lmer(update.formula(form,.~.), 
       data=subset(dat,Protocol==pr)) 
    return(rets) 
} 

, so dass die subsetting sofort erledigt wird, anstatt zu warten, bis die Funktion aus einer Umgebung genannt wird, in dem pr nicht gefunden werden kann.

Wenn ich das tue ich dann eine Reihe von verschiedenen Probleme, die wahrscheinlich sind aufgrund Ihrer Einrichtung einer unrealistischen einfache MWE ...

  • Error: no random effects terms specified in the formula. (Geändert 0+Item-0+(1|Item) in der ursprünglichen Formel)
  • Error: number of levels of each grouping factor must be < number of observations (könnte wahrscheinlich mit dieser umgehen zu ...)
+0

Dies trägt dazu bei, danke! – Mark