如何将一组命令转换为R中的循环

时间:2017-06-29 19:14:12

标签: r loops

我想将这组命令转换为循环。

 sbj05_GD = load("ep_sbj05_GD.Rdata")
 sbj06_GD = load("ep_sbj06_GD.Rdata")
 sbj08_GD = load("ep_sbj08_GD.Rdata")
 sbj09_GD = load("ep_sbj09_GD.Rdata")

 sbj05_max <-max(sbj05_GD$A)
 sbj06_max <-max(sbj06_GD$A)
 sbj08_max <-max(sbj08_GD$A)
 sbj09_max <-max(sbj09_GD$A)

 max_sum <- rbind(sbj05_max,sbj06_max,sbj08_max,sbj09_max)
 max_sum <-as.data.frame(max_sum)
 colnames(max_sum) <- c("max")
 max_sum$sbj <- c("sbj05","sbj06","sbj08","sbj09")

 write.table(max_sum, file = "Ep_max_sum.txt",sep="\t",row.names=FALSE)

我从这次尝试开始,但是我无法确定如何在循环中对文件进行处理。

file=list.files("path/", pattern="*.Rdata", full.names="TRUE")
for (i in 1:file){
data=load(file[i])
data_max[i] <-max(file[i]$A)
}

我对循环不是很熟悉,所以如果你能建议如何继续,我将不胜感激,如果有一个for循环,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

file.codes <- c("05", "06", "08", "09")
max_sum <- data.frame(sbj = file.codes, max = NA)
for (i in file.codes) {
    load(paste0("ep_sbj", i, "_GD.Rdata"))
    max_sum[max_sum$sbj == i, "max"] <- max(obj$A)
}

第1行创建文件代码的向量(它似乎是主题编号)。第2行创建数据框,您将存储所有内容。 for循环遍历文件代码并根据文件代码提取文件,然后将数据集中所需的值分配给数据框中的正确位置。这假定使用load()创建名为“obj”的数据框或列表;否则用其实际名称替换obj。据推测,每个文件都是一样的。可能有更多雄辩的方法可以做到这一点,但这个方法很简单。

您可以在两行中执行以下操作:

file.codes <- c("05", "06", "08", "09")
max_sum <- data.frame(sbj = file.codes, 
                      max = sapply(file.codes, function(i) {
                          load(paste0("ep_sbj", i, "_GD.Rdata"))
                          return(max(obj$A))
                             }))

使用sapply()代替for来循环。

根据@ 42的评论编辑。