指的是循环中更大列表中的列表

问题描述 投票:2回答:1

我想循环浏览许多模型并输出系数

基本上,我想做下面的代码。但是,然后引用生成的列表中的每个对象,其中包含每个模型的对象列表以及model语句生成的数据对象。

所以下面是我想要的系数示例

library(broom)
library(tidyr)
library(dplyr)
library(nnet)
db<-mtcars
modelmpg<-multinom(cyl ~ vs + carb+ mpg, data = db)

modelmpg <- tidy(modelmpg, exponentiate = T)
modelmpg1 <- modelmpg[-5]
modelmpg2 <- reshape2::melt(modelmpg1, id=(c("y.level", "term")))

modelmpg3 <- spread(modelmpg2, y.level, value )
modelmpg3$term[modelmpg3$variable %in% c("std.error", "p.value")] <- ""

[现在说,我想对所有变量进行处理,并为vs,carb和第三个变量i(这是在已确定的变量列表中确定的变量之一)的每种组合运行模型

#create varlist
varlist.iv <- c("mpg", "disp", "drat", "wt")

#create a list of the results for each multinomial log regression 
models <- lapply(varlist.iv , function(x) {multinom(substitute(cyl ~ vs + carb + i ,list(i = as.name(x))), data = db)})

这里是一切都崩溃的地方。我尝试在模型列表中将模型中的系数称为[[i]]。并且它不识别它。我也尝试过[[i]] [[3]],我认为这意味着列表中第i个对象的第三个对象是模型?参见下文(代码不起作用,但显示了我要执行的操作)


#Run a loop for each of the data manipulation steps

for (i in models){
  mod <- tidy(mod1[[i]], exponentiate = T)
  mod[,paste0(i,"1")] <- mod
  aa = paste0(i,"1")
  mod[,paste0(aa,"2")] <- aa[-5]

基本上是尝试复制代码的第一块,但对于varlist.iv中的所有i变量都处于循环中

有人可以帮我吗?循环方面的一些帮助将非常有用,但可以帮助我理解如何识别哪个对象在哪个列表中,这对我确实有帮助。我已经阅读了帮助文档,但是我一定会误会它。

r list loops
1个回答
0
投票

使用reformulate动态创建公式并将所有内容放入函数中

apply_fun <- function(col, data) {
   modelmpg<- nnet::multinom(reformulate(c('vs', 'carb', col), 'cyl'), data = data)
   modelmpg <- broom::tidy(modelmpg, exponentiate = T)
   modelmpg1 <- modelmpg[-5]
   modelmpg2 <- reshape2::melt(modelmpg1, id=(c("y.level", "term")))
   modelmpg3 <- tidyr::spread(modelmpg2, y.level, value )
   modelmpg3$term[modelmpg3$variable %in% c("std.error", "p.value")] <- ""
   modelmpg3
}

使用lapply将其应用于每个varlist.iv

lapply(varlist.iv, apply_fun, data = db)

#[[1]]
#          term  variable            6            8
#1  (Intercept)  estimate 1.113636e+36 4.403167e+62
#2              std.error 9.005444e+01 1.055447e+02
#3                p.value 3.566995e-01 1.717352e-01
#4         carb  estimate 2.347367e-01 3.671800e-02
#5              std.error 2.798606e+00 3.669880e+00
#6                p.value 6.045548e-01 3.678889e-01
#7          mpg  estimate 3.267209e-02 2.018146e-03
#8              std.error 3.798023e+00 4.566156e+00
#9                p.value 3.676982e-01 1.741347e-01
#10          vs  estimate 2.157612e-04 1.245287e-12
#11             std.error 1.188903e+01 1.471332e+02
#12               p.value 4.776976e-01 8.522056e-01

#[[2]]
#          term  variable            6            8
#1  (Intercept)  estimate 8.958256e-20 1.550393e-30
#2              std.error 8.886837e+01 1.147019e+02
#3                p.value 6.216388e-01 5.495648e-01
#4         carb  estimate 8.551950e+01 9.671903e+00 
#...
© www.soinside.com 2019 - 2024. All rights reserved.