Я хочу знать, как добавить имена объектов data.frame из списка в столбцах в указанном списке объектов data.frame.
Я создал список объектов lm()
, в которых различаются только DV (известные как DV_col
) (либо mpg
, drat
, disp
). Общий формат 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",
mtcars_DVs$Variable_name,
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",
mtcars_DVs$Variable_name,
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) удалить часть текста из этой переменной, чтобы создать переменную только с DV, специфичным для этого анализа, для каждого объекта в списке Variable_name
.
Я хочу сделать (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", "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 = "__")
)
## 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",
mtcars_DVs$Variable_name,
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",
mtcars_DVs$Variable_name,
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")
# 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)