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



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

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 循环是否是要走的路,我将不胜感激。

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的评论进行编辑。

最新更新