2016-07-20 6 views
2

Я столкнулся с какой-то странной областью (возможно?) Проблемой ... MWE ниже вызывает RunSamples, печатает переменную pr, а затем выдает ошибку на следующей строке, говорящей, что pr не существует. Я не могу понять, почему функция печати может найти и распечатать переменную pr, но lmer не может. Любая помощь будет оценена по достоинству. Кроме того, если я изменяю аргумент pr на prot, код работает нормально.Переменная не найдена; Scoping Issue

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) 
} 

ответ

0

Я не уверен, что могу это исправить, в том смысле, что это просто работа, но я думаю, что я могу объяснить, что происходит, и дать вам разумное решение.

lmer делает множество (возможно чрезмерно) сложных вещей, чтобы попытаться оценить данные и убедиться, что все переменные, упомянутые в формуле, присутствуют. Он пытается переносить все переменные в аргументе data, а также те, которые присутствуют в среде формулы, но помимо этого возникают проблемы. Проксимальная проблема заключается в том, что ваш вызов subset относится к переменной, которая не существует ни в одном из этих мест. Простое решение заключается в использовании функции subset вместо subset аргумента:

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

так, что Подменю будет сделано сразу, а не ждать, пока эта функция вызывается из среды, в которой pr не может быть найден.

Когда я делаю это я потом столкнуться ряд различных проблем, которые, вероятно, из-за вашей настройке неправдоподобно простой MWE ...

  • Error: no random effects terms specified in the formula. (Измененная 0+Item к 0+(1|Item) в исходной формуле)
  • Error: number of levels of each grouping factor must be < number of observations (вероятно, может иметь дело с этим тоже ...)
+0

Это помогает, спасибо! – Mark

Смежные вопросы