R 通过字符向量列表从数据帧列表中选择变量的有效方法
我有三个数据帧的列表,如下所示R 通过字符向量列表从数据帧列表中选择变量的有效方法,r,list,loops,R,List,Loops,我有三个数据帧的列表,如下所示 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]) 对于每个模型,我只想选择da
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])
对于每个模型,我只想选择dat\u列表
中包含在model\u列表
相应对象中的变量。当然,在本例中,每个模型的结果都是相同的
我可以使用嵌套的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
subset\u list我认为一个lappy
应该比嵌套循环更有效
subset_list <- lapply(model_list, function (model) {
dat1 <- dat[,model$dat1]
dat2 <- dat[,model$dat2]
dat3 <- dat[,model$dat3]
list(dat1 = dat1, dat2 = dat2, dat3 = dat3)
})
subset\u list我认为一个lappy
应该比嵌套循环更有效
subset_list <- lapply(model_list, function (model) {
dat1 <- dat[,model$dat1]
dat2 <- dat[,model$dat2]
dat3 <- dat[,model$dat3]
list(dat1 = dat1, dat2 = dat2, dat3 = dat3)
})
subset\u list您能否澄清一下,您希望model\u list
中的列列表与其在dat\u list
中对应的列列表相匹配?根据我推测的索引?看看@csgroen的解决方案,我意识到dat\u list
甚至没有必要。但是可以。您能澄清一下吗,您想让model_list
中的列列表与其dat_list
中相应的列列表相匹配吗?根据我推测的索引?看看@csgroen的解决方案,我意识到dat\u list
甚至没有必要。是的,非常感谢。事实上,这是一个更聪明的解决方案。我想我太专注于循环了。非常感谢。事实上,这是一个更聪明的解决方案。我想我太专注于循环了。