使用Lavaan的多个数据帧的R循环

时间:2019-02-27 12:54:00

标签: r loops r-lavaan

我目前正在处理8个波形的数据,现在每个波形都存储在其自己的数据框中。我已经进行了很多重复的大多数数据清理工作,因为我不知道如何使R在不同的数据帧上运行相同的脚本。现在,我想使用Lavaan进行CFA,并且我注意到脚本变得非常混乱,因为在所有8个波中都针对多个变量执行了CFA。我很想找到一种简化脚本的方法,这样对我和其他人都很清楚。您可以在下面找到一个简短的示例,以说明代码的“长”版本是什么样子,但是我希望能在缩短代码方面获得帮助!

我尝试过使用for循环,但无法使其正常工作。

如果您有任何提示,请告诉我,这样我就可以停止复制粘贴相同的代码并替换df中的数字!

var msgUserID = msg.author.id;
var allUsers = [];
var reset = true;

bot.guilds.forEach((guild, id) => {
  if(reset) {
    guild.members.forEach((user, id) => {
      allUsers.push(user);

      if(id == msgUserId)
        reset = false;
    });

    if(reset)
      allUsers = [];
  }
});

if (allUsers) {
  var idx = Math.trunc(Math.random() * allUsers.length);

  allUsers[idx].setDeaf(true),
  allUsers[idx].setMute(true);
} 
else 
  msg.channel.send("You must be in a voice channel with others for this to work!");

...

2 个答案:

答案 0 :(得分:0)

一种简化方法是将所有bds_x data.frames放入list,然后使用lapply()在所有模型中运行模型

model_ADI_aff <- "aff =~ bds89 + bds39 + bds50 + bds29 + bds84 + bds49 + bds70 + bds88 + bds11 + bds28"

fun = function(bds){
 fit = cfa(model_ADI_aff,
           data = bds,
           missing = "fiml",
           estimator = "MLR",
           se = "robust.huber.white",
           test = "yuan.bentler")
 summ = summary(fit)
 mo = modindices(fit_ADI_aff_2, sort.=TRUE, minimum.value=3)

 list(fit = fit,summary = summ, modindices = mo)
}

df_list = "list containing all bds"
results = lapply(df_list,fun)

results将是一个列表列表,每个列表包含每个data.frame

的拟合度,摘要和modindices

答案 1 :(得分:0)

@Fino

我做了一些调整,看来已经成功了,非常感谢!

fun = function(bds){
  fit = cfa(model_ADI_aff,
            data = bds,
            missing = "fiml",
            estimator = "MLR",
            se = "robust.huber.white",
            test = "yuan.bentler")
  summ = summary(fit, standardized = TRUE, fit.measures = TRUE)
  mo = modindices(fit, sort.=TRUE, minimum.value=3)

  list(fit = fit,summary = summ, modindices = mo)
}

df_list <- list (bds_1, bds_2, bds_3, bds_4, bds_5, bds_6, bds_7, bds_8)
results = lapply(df_list,fun)