迭代R中的模式grep函数

时间:2017-08-15 15:04:05

标签: r for-loop lapply

我是R的新手。我想在R中为下面的代码编写循环。

day1<-XYZ[, -grep("_0", colnames(XYZ))]
day2<-XYZ[, -grep("_0|_1", colnames(XYZ))]
day3<-XYZ[, -grep("_0|_1|_2", colnames(XYZ))]
day4<-XYZ[, -grep("_0|_1|_2|_3", colnames(XYZ))]
day5<-XYZ[, -grep("_0|_1|_2|_3|_4", colnames(XYZ))]
day6<-XYZ[, -grep("_0|_1|_2|_3|_4|_5", colnames(XYZ))]
day7<-XYZ[, -grep("_0|_1|_2|_3|_4|_5|_6", colnames(XYZ))]
day8<-XYZ[, -grep("_0|_1|_2|_3|_4|_5|_6|_7", colnames(XYZ))]
day9<-XYZ[, -grep("_0|_1|_2|_3|_4|_5|_6|_7|_8", colnames(XYZ))]
day10<-XYZ[, -grep("_0|_1|_2|_3|_4|_5|_6|_7|_8|_9", colnames(XYZ))]
day11<-XYZ[, -grep("_0|_1|_2|_3|_4|_5|_6|_7|_8|_9|_10", colnames(XYZ))]
day12<-XYZ[, -grep("_0|_1|_2|_3|_4|_5|_6|_7|_8|_9|_10|_11", colnames(XYZ))]
day13<-XYZ[, -grep("_0|_1|_2|_3|_4|_5|_6|_7|_8|_9|_10|_11|_12", colnames(XYZ))]
day14<-XYZ[, -grep("_0|_1|_2|_3|_4|_5|_6|_7|_8|_9|_10|_11|_12|_13", colnames(XYZ))]
day15<-XYZ[, -grep("_0|_1|_2|_3|_4|_5|_6|_7|_8|_9|_10|_11|_12|_13|_14", colnames(XYZ))]
day16<-XYZ[, -grep("_0|_1|_2|_3|_4|_5|_6|_7|_8|_9|_10|_11|_12|_13|_14|_15", colnames(XYZ))]

提前致谢!!

1 个答案:

答案 0 :(得分:3)

我们可以使用lapply并在list

中创建子集
lst <- lapply(0:15, function(x) XYZ[, -grep(paste("_", 0:x, collapse="|",
          sep=""),  colnames(XYZ))])
names(lst) <- paste0("day", 1:16)

最好不要在全局环境中创建多个对象。但是,如果我们是为了探索

i1 <- 0:15
for(i in seq_along(i1)) {
    assign(paste0("day", i), 
        value = XYZ[, -grep(paste("_", 0:i1[i], collapse="|", sep=""), colnames(XYZ))])
}