微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从所述 data.frame 对象列表的列中的列表中添加 data.frame 对象的名称

如何解决从所述 data.frame 对象列表的列中的列表中添加 data.frame 对象的名称

我想知道如何从所述 data.frame 对象列表的列中的列表中添加 data.frame 对象的名称

我创建了一个 lm() 对象列表,其中只有 DV(称为 DV_col)有所不同(mpgdratdisp)。 lm() 的一般格式为:lm( DV_col ~ cyl,data = mtcars).

# sets up data

## list of DVs to use
mtcars_DVs <- data.frame(c("mpg","drat","disp"))
names(mtcars_DVs)[names(mtcars_DVs) == "c..mpg....drat....disp.."] <- "Variable_name"
mtcars_DVs$Variable_name <- as.character(mtcars_DVs$Variable_name)

## creates lm object list
# ---- NOTE: creates object list
lm_list <-
  lapply(mtcars_DVs$Variable_name,function(DV_list) wrapr::let(
           c(DV_col = DV_list,dataset_obj = "mtcars",IV_col_key = "cyl"),(lm(
             DV_col ~ 
               IV_col_key,data = dataset_obj
           )
           )
         )
  )
# ---- NOTE: changes list object name
lm_list <- 
  setNames(lm_list,paste("lm_list",mtcars_DVs$Variable_name,sep = "__")
  )


然后我使用列表中的 confint() 创建一个 confint 对象列表,并将其转换为数据帧列表,每个数据帧都有特定的基于 DV 的名称


## creates coef object
lm_confint_list <- 
  lapply(
    lm_list,function(model_list) {
      confint(model_list)
    }
  )
# ---- NOTE: changes list object name
lm_confint_list <- 
  setNames(lm_confint_list,paste("lm_confint_list",sep = "__")
  )
# ---- NOTE: creates unique objects for each part list object
list2env(lm_confint_list,.GlobalEnv)
# ---- NOTE: gathers objects with prefix
apropos("lm_confint_list")


## turns lm_confint_list into data frame
lm_confint_df_list <- 
  lapply(
    lm_confint_list,function(model_list) {
      data.frame(model_list,header = TRUE)
    }
  )
# ---- NOTE: changes list object name
lm_confint_df_list <- 
  setNames(lm_confint_df_list,paste("lm_confint_df_list",sep = "__")
  )
# ---- NOTE: creates unique objects for each part list object
list2env(lm_confint_df_list,.GlobalEnv)
# ---- NOTE: gathers objects with prefix
apropos("lm_confint_df_list")

我现在想要 (1) 向数据框中的每个列表添加一个变量,该变量只是重复了数据框列表的名称,称为 object_name。然后,我想 (2) 从此变量中删除一些文本,为列表 Variable_name 中的每个对象创建一个仅包含特定于该分析的 DV 的变量。

我想在不需要手动输入的情况下使用迭代代码来执行 (1) 和 (2),期待如果我更改对象 mtcars_DVs$Variable_name 的性质(即,添加删除可能的因变量为用于创建模型列表)。

这可能吗?我知道如何通过大量的手动输入长期执行此操作,但不知道如何使用最少的手动输入进行短时间迭代。

提前致谢。



这是完成(1)和(2)的漫长道路:

# long way of adding column with object name,will do one confint(),process can be repeated for other variables

## adds as column with name of object to object via manual text input
# ---- NOTE: REQUIRES MANUAL INPUT
lm_confint_df_list__disp$object_name <- "lm_confint_df_list__disp"

## creates column with DV from object_name variable
lm_confint_df_list__disp$Variable_name <- 
  gsub(".*__","",lm_confint_df_list__disp$object_name)


这是 lm confint 结果之一的完整输出

> lm_confint_df_list__disp
                X2.5..   X97.5.. header              object_name Variable_name
(Intercept) -228.45716 -84.76080   TRUE lm_confint_df_list__disp          disp
cyl           51.42909  73.76876   TRUE lm_confint_df_list__disp          disp


这是我使用的所有代码



# sets up data

## list of DVs to use
mtcars_DVs <- data.frame(c("mpg",sep = "__")
  )

## creates coef object
lm_confint_list <- 
  lapply(
    lm_list,.GlobalEnv)
# ---- NOTE: gathers objects with prefix
apropos("lm_confint_list")

## turns lm_confint_list into data frame
lm_confint_df_list <- 
  lapply(
    lm_confint_list,.GlobalEnv)
# ---- NOTE: gathers objects with prefix
apropos("lm_confint_df_list")




# long way of adding column with object name,lm_confint_df_list__disp$object_name)


解决方法

您可以在 Map 的帮助下完成此操作:

lm_confint_df_list <- Map(function(x,y) 
            data.frame(x,object_name = y,Variable_name = gsub(".*__","",y),check.names = FALSE),lm_confint_list,names(lm_confint_list))

lm_confint_df_list

#$lm_confint_list__mpg
#                2.5 %    97.5 %          object_name Variable_name
#(Intercept) 33.649223 42.119930 lm_confint_list__mpg           mpg
#cyl         -3.534237 -2.217343 lm_confint_list__mpg           mpg

#$lm_confint_list__drat
#                 2.5 %     97.5 %           object_name Variable_name
#(Intercept)  4.3803292  5.4059919 lm_confint_list__drat          drat
#cyl         -0.2892782 -0.1298242 lm_confint_list__drat          drat

#$lm_confint_list__disp
#                 2.5 %    97.5 %           object_name Variable_name
#(Intercept) -228.45716 -84.76080 lm_confint_list__disp          disp
#cyl           51.42909  73.76876 lm_confint_list__disp          disp

将单个对象放入全局变量中。

list2env(lm_confint_df_list,.GlobalEnv)   

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。