7

coeftestオブジェクトから 2 つ以上の列を抽出できる関数はありますか? これは一度に 1 つのオブジェクトで簡単ですが、(ループcoeftest以外の) リストに対して同じことを行うことはできますか?for()

> # meaningless data
> temp <- data.frame(a = rnorm(100, mean = 5), b = rnorm(100, mean = 1),
+                    c = 1:100)
> formulas <- list(a ~ b, a ~ c)
> models <- lapply(formulas, lm, data = temp)
> library(lmtest)
> cts <- lapply(models, coeftest)

> # easy to extract columns one object at a time
> cts[[1]][, 1:2]
              Estimate Std. Error
(Intercept)  5.0314196  0.1333705
b           -0.1039264  0.0987044

> # but more difficult algorithmically
> # either one column
> lapply(cts, "[[", 1)
[[1]]
[1] 5.03142

[[2]]
[1] 5.312007

> # or two
> lapply(cts, "[[", 1:2)
Error in FUN(X[[1L]], ...) : attempt to select more than one element

おそらく、より基本的な質問は、coeftestオブジェクトの肉をデータフレームに変換する方法があるかどうかです。これにより、列を個別に抽出してからmapply(). ありがとう!

編集:最初と2番目の列を持つ行列(またはデータフレーム)になりたいと思います。

    [[1]]
              Estimate Std. Error
(Intercept)  5.0314196  0.1333705
b           -0.1039264  0.0987044

[[2]]
                Estimate  Std. Error
(Intercept)  5.312007153 0.199485363
c           -0.007378529 0.003429477
4

2 に答える 2

12

[[この場合、間違ったサブセット関数です。lapply()リストを操作する場合、操作しているのはリストのコンポーネントであり、i 番目のコンポーネントはlist[[i]]どこで得られるかということに注意してください。i

そのため、通話に必要なのはほんの[, 1:2]少しだけです。の引数のために少しトリッキーですが、で簡単に実行できます:cts[[1]][, 1:2]lapply()[lapply()

> lapply(cts, `[`, , 1:2)
[[1]]
                Estimate Std. Error
(Intercept)  4.926679544  0.1549482
b           -0.001967657  0.1062437

[[2]]
               Estimate  Std. Error
(Intercept) 4.849041327 0.204342067
c           0.001494454 0.003512972

<space>,前に注意してください1:2。これは と同等です[ , 1:2]

于 2011-06-15T15:43:48.897 に答える
5

これがあなたが望むものかどうかはわかりませんが、どうですか:

> do.call("rbind", cts)[, 1:2]
                 Estimate  Std. Error
(Intercept)  4.8200993881 0.142381642
b           -0.0421189130 0.092620363
(Intercept)  4.7459340076 0.206372906
c            0.0005770324 0.003547885
于 2011-06-15T15:13:32.207 に答える