1

lmRIでは、多くの場合、タイプオブジェクト(、、glmなどlme)のリストを循環clmし、新しい式または他の引数でそれらを更新する必要があります。lapply()名前をそのままにして同じリスト形式で返すため、これを使用してこれを行います。これにより、プロセスを続行できます。

私が渡す引数は動的であり、モデルごとに異なる場合があります。例えば、

lapply(names(mylist) function(ii) {
  jj<-myotherlist[[ii]]; 
  update(mylist[[ii]],.~.+jj)
}) 

ここjjで、はリスト内の各モデルに追加される用語であり、モデルごとに他のリストで定義されます。

特定のモデルの意図された結果式がであると想定されたとしましょうy~a+b+c。その代わりに、結果のオブジェクト内の呼び出しオブジェクトには。lmが含まれますy~a+b+jj。そのため、状況によっては、結果のlmオブジェクトは正常に動作しますが、数式を評価する必要があるときはいつでも、jj長い間使用されていないためにエラーになります。update()出力にオブジェクトを書き込むときに引数内のすべての変数を強制的に展開するか、オブジェクトcallを使用する関数にグローバルコンテキストではなくオブジェクトの内部コンテキストでcall呼び出しを評価するように強制する推奨される方法はありますか?少なくとも、スタイルオブジェクトに通常含まれているまたはオブジェクトlmに新しい変数を詰め込むことができますか?modeldatalm

また、動的変数で更新される部分がデータ引数である場合はどうなりますか?例えば:

data=cbind(sharedByAllModels,y=kk)

...kk現在のモデルに固有の場所(おそらく、sharedByAllModelsデータフレーム内の特定の列のある種の集約)。

4

2 に答える 2

3

主な質問に答えると、 を使用bquote()して、更新式オブジェクトのどの部分 (つまり 内の部分.()) が評価されるかを制御できます。

mylist <- list(y ~ a + b, y ~ A + B)
myotherlist <- list("c", "C")

lapply(1:2, function(ii) {
    jj <- as.name(myotherlist[[ii]])
    update(mylist[[ii]], bquote(. ~ . + .(jj)))})
# [[1]]
# y ~ a + b + c
# 
# [[2]]
# y ~ A + B + C

substitute()または、同様の方法で使用します。

lapply(1:2, function(ii) {
      jj <- as.name(myotherlist[[ii]])
      update(mylist[[ii]], substitute(. ~ . + jj))
      })
# [[1]]
# y ~ a + b + c
# 
# [[2]]
# y ~ A + B + C
于 2012-07-30T18:16:45.620 に答える
1

do.call実行前に引数を評価する を使用します。貼り付けた数式で作成された lme フィットで anova テストが失敗することを確認してください。

于 2012-07-30T18:13:56.847 に答える