1

一連のモデルで使用した数式を data.frame に追加したい

require(plyr)
require(nlme)
str(baseball)
ba <- baseball[1:100,]
m01 <- gls( g ~ ab+I(r^2)+cos(pi*h),data=ba,correlation = corARMA(p=1))
m02 <- gls( g ~ I(ab^3)+r+cos(pi*h)+sin(pi*h),data=ba,correlation = corARMA(p=1))
m03 <- gls( g ~ ab+r,data=ba,correlation = corARMA(p=1))

モデルが 3 つあり、モデルの名前と数式の 2 つの列が必要です。

mof <-ldply(ls(pattern=glob2rx("m0*")))

mof <-ddply(mof, .(V1),transform, form =formula(V1))

を与える

Error en as.data.frame.default(x[[i]], optional = TRUE) : 
  cannot coerce class '"formula"' into a data.frame

いろいろやってみたのですが、うまくいきません。

4

2 に答える 2

3

言語要素を扱う場合、いくつかのルールが変更されます。結果にラベルを付けるために 1 つまたは 2 つの文字列が必要なようですが、最初の "mof" オブジェクトで作成したのは、モデル自体ではなく、モデルの名前だけの文字ベクトルです。

> str(mof)
'data.frame':   3 obs. of  1 variable:
 $ V1: chr  "m01" "m02" "m03"

文字ベクトルを使用してワークスペースからモデルを取得するには、 を使用する必要がありますgetformulaその後、関数およびを使用してさらに処理することができますas.character。クラス式のオブジェクトは有効なデータフレーム コンポーネントではないため、最後にキャラクター モードに「戻る」必要があります。1 つのネストされた呼び出しで、これは次のようになります。

> forms.mat <- sapply( lapply( lapply(mof$V1, get) , formula), as.character)
> forms.mat
     [,1]                        [,2]                                      [,3]    
[1,] "~"                         "~"                                       "~"     
[2,] "g"                         "g"                                       "g"     
[3,] "ab + I(r^2) + cos(pi * h)" "I(ab^3) + r + cos(pi * h) + sin(pi * h)" "ab + r"

次のように再配置できます (LHS 式と RHS 式の間にチルダを戻し、(collapse="" を使用して) 一緒に貼り付けます):

> apply(forms.mat[ c(2,1,3),], 2, paste, collapse="")
[1] "g~ab + I(r^2) + cos(pi * h)"               "g~I(ab^3) + r + cos(pi * h) + sin(pi * h)"
[3] "g~ab + r"   

リストを操作するだけで、これを少し単純化できたかもしれません。

> mof2 <- list(m01,m02,m03)  # Skipping the search of the workspace and reconstitution 
> lapply(mof2, formula)
[[1]]
g ~ ab + I(r^2) + cos(pi * h)
<environment: 0x2ef997c60>

[[2]]
g ~ I(ab^3) + r + cos(pi * h) + sin(pi * h)
<environment: 0x19fef52d0>

[[3]]
g ~ ab + r
<environment: 0x19fef68d8>

> sapply( lapply(mof2, formula), as.character )
     [,1]                        [,2]                                      [,3]    
[1,] "~"                         "~"                                       "~"     
[2,] "g"                         "g"                                       "g"     
[3,] "ab + I(r^2) + cos(pi * h)" "I(ab^3) + r + cos(pi * h) + sin(pi * h)" "ab + r"
于 2012-12-14T21:20:22.567 に答える
0

最初の列は、問題のないモデルの名前です。

mof <-ldply(ls(pattern=glob2rx("m0*")))

2列目はモデルの式です

names(mof)[1] <- "model"
mof$formula <- as.character(lapply(mof$model,formula))

その後、モデル選択のために修正されたAICなどの列を追加しますが、それはうまく機能しています。

すべてのコメント投稿者に感謝します!

于 2012-12-15T15:09:38.877 に答える