2015-05-17 2 views
0

Я использую пакет lavaan, и мое намерение состоит в том, чтобы получить остатки моей модели в качестве данных для дальнейшего использования. Я запускаю несколько моделей с группировкой переменных. Вот основной рабочий процесс:Извлечение остаточных значений из матриц лавановых списков в R

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")) 

Теперь результирующий объект остатков меня задевает. Это список матриц, вложенных несколько раз. Как получить каждую из матриц в виде отдельного блока данных без какого-либо жесткого кодирования? Я не хочу их перечислять, так как это потеряет некоторую информацию.

+2

Похоже, у вас есть ошибка редактирования/копирования/вставки ближе к концу вашего кода - функция не имеет закрывающей скобки. Кроме того, что вы подразумеваете под «без какого-либо жесткого кодирования»? –

+0

Вы правы. Я это исправил. – Antti

ответ

1

Вы можете использовать list2env вместе с unlist сделать grp1, grp2, length.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) 
+1

Это работает. Тем не менее, я нашел решение, которое я получил от группы lavaan Google, более удобный. lapply (остатки, функция (x) {lapply (x, data.frame)} делает это. – Antti

Смежные вопросы