1

私はlavaanパッケージを使用しています。私の意図は、モデルの残差をデータフレームとして取得して、さらに使用することです。グループ化変数を持ついくつかのモデルを実行します。基本的なワークフローは次のとおりです。

require(lavaan)
df <- data.frame(
        y1 = sample(1:100),
        y2 = sample(1:100),
        x1 = sample(1:100),
        x2 = sample(1:100),
        x3 = sample(1:100),
        grpvar = sample(c("grp1","grp2"), 100, replace = T))
semModel <- list(length = 2)
semModel[1] <- 'y1 ~ c(a,b)*x1 + c(a,b)*x2'
semModel[2] <- 'y1 ~ c(a,b)*x1 
                y2 ~ c(a,b)*x2 + c(a,b)*x3'
funEstim <- function(model){
    sem(model, data = df, group = "grpvar", estimator = "MLM")}
fits <- lapply(semModel, funEstim)
residuals <- lapply(fits, function(x) resid(x, "obs"))

結果のresidualsオブジェクトが私を悩ませています。これは、数回ネストされた行列のリストです。ハードコーディングせずに、各マトリックスを個別のデータフレームとして取得するにはどうすればよいですか? 一部の情報が失われるため、リストから除外したくありません。

4

1 に答える 1

2

list2envと一緒に使用unlistして、grp1grp2length.grp1、およびlength.grp2をグローバル環境で直接使用できるようにすることができます。

list2env(unlist(residuals, recursive=FALSE), envir=.GlobalEnv)
ls()
#[1] "df"          "fits"        "funEstim"    "grp1"        "grp2"       
#[6] "length.grp1" "length.grp2" "residuals"   "semModel"

しかし、それらはデータ フレームにはなりません。そのためには、呼び出す前にそれらをデータ フレームに変換できますlist2env

df.list <- lapply(unlist(residuals, recursive=FALSE), data.frame)
list2env(df.list, envir=.GlobalEnv)
于 2015-05-17T15:48:27.343 に答える