【发布时间】:2018-01-25 13:47:16
【问题描述】:
我有如下三个数据框的列表
set.seed(1)
dat <- as.data.frame(replicate(n = 8, expr = round(rnorm(3), 2)))
colnames(dat) <- LETTERS[1:8]
dat_list <- list(dat1 = dat,
dat2 = dat[, 1:7],
dat3 = dat[, 1:4])
dat3 是dat2 的子集,dat1 是dat1 的子集。
我有另一个列表,其中每个对象包含三个命名的字符向量列表。字符向量指的是上面数据集的列名。列表看起来像这样
set.seed(1)
colnames_list <-
lapply(c(6, 4, 2), function(x)
replicate(n = 1, sample(
names(dat), size = x, replace = FALSE
)))
colnames_list <- lapply(colnames_list, as.vector)
names(colnames_list) <- names(dat_list)
model_list <- list(rpart = colnames_list,
lm = colnames_list)
model_list[1]
#$rpart
#$rpart$dat1
#[1] "C" "H" "D" "E" "A" "G"
#$rpart$dat2
#[1] "H" "E" "D" "A"
#$rpart$dat3
#[1] "B" "H"
对于每个模型,我只想选择 dat_list 中的那些变量,这些变量包含在 model_list 的相应对象中。当然,在此示例中,每个模型的结果都是相同的。
我可以使用嵌套的for 循环来做到这一点,如下所示
subset_list <- list()
for (i in names(model_list)) {
subset_list[[i]] <- list()
for (j in names(dat_list)) {
subset_list[[i]][[j]] <- dat[, model_list[[i]][[j]]]
}
}
subset_list[1]
#$rpart
#$rpart$dat1
# C H D E A G
#1 0.49 0.78 -0.31 -0.62 -0.63 0.82
#2 0.74 0.07 1.51 -2.21 0.18 0.59
#3 0.58 -1.99 0.39 1.12 -0.84 0.92
#$rpart$dat2
# H E D A
#1 0.78 -0.62 -0.31 -0.63
#2 0.07 -2.21 1.51 0.18
#3 -1.99 1.12 0.39 -0.84
#$rpart$dat3
# B H
#1 1.60 0.78
#2 0.33 0.07
#3 -0.82 -1.99
这段代码应该是迭代更多模型、选择重要变量并再次重新估计模型的函数的一部分。由于我正在处理的数据集包含数百个变量,我想知道是否有人可以提出一种更有效/更智能的方法来完成这项任务。非常感谢。
【问题讨论】:
-
您能否澄清一下,您希望
model_list中的列列表与其对应的dat_list中的列列表匹配吗?根据我推测的索引? -
查看@csgroen 的解决方案,我意识到
dat_list甚至没有必要。但是是的。