遍历子目录,重塑矩阵并在 R 中保存输出

Looping through subdirectories, reshaping matrix and saving output in R

我有一个项目文件夹 (project1),其中包含来自 20 个主题(Sub-001、Sub-002 等)的数据。每个受试者的文件夹都包含一个子文件夹(名为 AD),其中有一个 AD.csv 相关矩阵。

文件夹结构如下所示

                                            ├── Sub-001
                                            │   └── AD
                                            │       └── AD.csv
                                            └── Sub-002
                                                └── *

我想编写一个 for 循环,迭代进入每个主题的 AD 文件夹,将 AD.csv 矩阵从宽变为长,并将重塑后的矩阵保存为新的 subj_AD_reshaped.csv 文件,命名为在主题的 ID 之后(例如,Sub-001_AD_reshaped.csv),在主题的文件夹中。

我写的代码:

files<-list.files("group/S/project1/")
subjects<-list.dirs(path=files, full.names=T, recursive=F)
subj.AD<-subjects/"AD"

for (subj.AD in 1:length(subjects)) {
        df<-read.csv("matrix.csv", sep="", header=F)
        df.matrix<-as.matrix(df)
        df.matrix[lower.tri(df.matrix)]<-NA
        df.matrix.melt<-as.data.frame(reshape2::melt(df.matrix, na.rm=T))
        write.csv(df.matrix.melt, file="subjects/Subject_AD_reshaped.csv))

}

此代码不起作用,主要是因为 R 似乎无法识别用于输入和输出的 AD 文件夹。编写此 for 循环的最佳方式是什么?

也许下面的代码可以解决问题。

base_path <- "group/S/project1"
subjects <- list.dirs(path = base_path, full.names = TRUE, recursive = FALSE)

for(s in subjects){
  fl <- file.path(s, "AD", "AD.csv")
  df1 <- read.table(fl, sep = ",")
  df1.matrix <- as.matrix(df1)
  is.na(df1.matrix) <- lower.tri(df1.matrix)
  df2 <- as.data.frame(df.matrix)
  df2.melt <- reshape2::melt(df2, na.rm = TRUE)
  out_file <- paste0(basename(s), "_AD_reshaped.csv")
  out_file <- file.path(s, out_file)
  write.table(df2.melt, out.file, sep = ",", row.names = FALSE)
}