Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 通过字符向量列表从数据帧列表中选择变量的有效方法_R_List_Loops - Fatal编程技术网

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
甚至没有必要。是的,非常感谢。事实上,这是一个更聪明的解决方案。我想我太专注于循环了。非常感谢。事实上,这是一个更聪明的解决方案。我想我太专注于循环了。