2016-07-20 7 views
2

私はいくつかの奇妙なスコープ(おそらく?)の問題に遭遇しています...以下のMWEはRunSamplesを呼び出し、変数prを出力し、次の行にprが存在しないというエラーをスローします。印刷機能が変数prを見つけて印刷できる理由を理解できないようですが、lmerはできません。どんな助けもありがとう。また、pr引数をprotに変更すると、コードは正しく動作します。変数が見つかりませんでした。スコープの問題

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呼び出しが、それらの場所のいずれにも存在しない変数を参照していることです。サブセットは、すぐに行って、というよりも機能がprを見つけることができない環境から呼び出されるまで待機しますように

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

:簡単な回避策は、代わりにsubset引数のsubset機能を使用することです。

私はこれを行うと、私はその後、おそらくあなたは非現実的、簡単なMWEのセットアップに起因しているさまざまな問題、一連の遭遇...

  • Error: no random effects terms specified in the formula。 (元の式に0+(1|Item)0+Itemを変更)
  • Error: number of levels of each grouping factor must be < number of observations(多分...あまりにもこの1を扱うことができ)
+0

これは、感謝を助けます! – Mark

関連する問題