如何使我的代码在不同的excel文件中运行并在R中导出结果的唯一文件?

时间:2019-05-14 20:25:21

标签: r loops export multiple-files

我有六个excel文件,所有文件都具有相同的格式和相同数量的变量(但观察结果有所不同)。我有一段代码需要全部运行并导出结果(来自stat test的p值),但是我想知道如何让代码贯穿所有六个文件并导出六个唯一文件。

该代码很好用,但是我不得不分别上传每个文件,并每次以不同的名称导出它。

data = tf.data.Dataset.from_tensor_slices((X, y))
data = data.apply(tf.data.experimental.shuffle_and_repeat(buffer_size=len(y)))
data = data.batch(batch_size, drop_remainder=False)
data = data.prefetch(2)

我目前正在为每个原始文件(Kruskal P值和Wilcox P值)导出两个Excel文件,但是我必须手动输入并每次都调整名称。我希望代码能在所有代码中运行并导出唯一文件。

非常感谢。

1 个答案:

答案 0 :(得分:1)

这里for循环似乎很合适。此解决方案假定您的数据位于一个目录中,而结果将放在另一个目录中。但是,它们可以位于同一目录中。在此解决方案中,来自Kruskal-Wallis检验的p值和来自成对Wilcoxon检验的p值被合并到一个表中,该表将另存为Excel文件。

如果您希望合并结果,可以使用sheetName中的write.xlsx()选项来创建一个包含多张图纸的Excel文件。

在此示例中,您(当然)需要使用适合您情况的参数替换占位符“ <...>”。

# Define directories of data and results
  dataPath <- <directory with flow data>
  resultsPath <- <directory for results>

# Vector of file names; a pattern for old and new Excel files is "xlsx?$"
  ff <- list.files(path = dataPath, pattern = "<pattern>", full = TRUE)

# Good old fashioned for loop
  for (f in ff) {
    data <- read.xslx(f, <other parameters>) # edit as required
    pv1 <- apply(data[-1], 2, function(x) kruskal.test(x, data$Type)$p.value)
    pv1 <- t(pv1) # transpose 3 x 1 result to 1 x 3
    pv2 <- apply(data[-1], 2, function(x) pairwise.wilcox.test(x, data$Type,
      p.adjust.method = "BH")$p.value)
    pv2 <- na.omit(pv2)
    ans <- rbind(pv1, pv2)
    rownames(ans) <- c("Pval", "HC vs In", "HC vs OUT", "IN vs OUT")
    fout <- file.path(resultsPath, paste("RESULTS", basename(f), sep = "_"))
    write.xlsx(ans, fout, rowNames = TRUE)
  }

编辑

关于占位符“ <...>”变量:

对于目录,这只是文件的位置。例如,如果每个实验都使用一个目录,则数据和结果都可以存储在同一目录中。在Windows计算机上,这可能类似于"C:\Users\Owner\Documents\Flow Analysis\2019_0512"dataPathresultsPath都将被设置为该值。顺便说一句,您可以使用以下代码提取包含所选文件的数据目录。函数file.choose()可让您通过通常的操作系统对话框选择文件。

  dataPath <- dirname(file.choose())

有关list.files()功能,请参见list.files(或dir)的帮助功能。 pattern选项指定可用于仅选择数据文件的正则表达式。例如,如果六个数据文件看起来像“ FlowFile001.xlsx”,“ FlowFile002.xlsx”,...,“ FlowFile006.xlsx”,则指定这些文件的正则表达式模式可以是“流。* xlsx $”。 (如果不熟悉,请查阅regex,以了解正则表达式的世界。)

read.xslx()的参数取决于Excel文件中数据的结构。例如,它可以包括使用skipEmptyRows = TRUE跳过空白行。