我想将这组命令转换为循环。
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循环,我将不胜感激。
答案 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的评论编辑。