Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让我的代码在不同的excel文件中运行,并在R中导出结果的唯一文件?_R_Loops_Export - Fatal编程技术网

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

如何让我的代码在不同的excel文件中运行,并在R中导出结果的唯一文件?,r,loops,export,R,Loops,Export,我有六个excel文件,所有这些文件都具有相同的格式和相同数量的变量(但观察值不同)。我有一段代码需要运行它们并导出结果(stattest中的p值),但我想知道如何让代码运行所有六个文件并导出六个唯一的文件 代码工作得很好,但我必须分别上传每个文件,并每次以不同的名称导出它 data <- MorePercent & MoreCount & LessPercent & LessCount #Data Type Neutrophils Monocyt

我有六个excel文件,所有这些文件都具有相同的格式和相同数量的变量(但观察值不同)。我有一段代码需要运行它们并导出结果(stattest中的p值),但我想知道如何让代码运行所有六个文件并导出六个唯一的文件

代码工作得很好,但我必须分别上传每个文件,并每次以不同的名称导出它

data <- MorePercent & MoreCount & LessPercent & LessCount


#Data
    Type   Neutrophils  Monocytes   NKC .....
    ------------------------------------------
    IN       546          2663      545
    IN       0797         7979      008
    OUT      0899         3899      345
    OUT      6868         44533     689
    HC       9898         43443     563


#Kruskal and export 
PV <- as.data.frame(apply(data[-1], 2, 
              function(x) kruskal.test(x = x, g = data$Type)$p.value))

#rename col
colnames(PV) <- "PVal"
#export
write.xlsx(PV, "C:/Users/sxa074/Desktop/P01/Science Trans Med Follow Up/test2.xlsx")


#Post Hoc and export
PV1 <- as.data.frame(apply(data[-1], 2, 
           function(x) pairwise.wilcox.test(x = x, g = data$Type, p.adjust.method = "BH")$p.value))

#Omit NA row
PV1 <- na.omit(PV1)

#Rename Rows
row.names(PV1) <- c("HC vs In", "HC vs OUT", "IN vs OUT")
#Export
write.xlsx(PV1, "C:/Users/sxa074/Desktop/P01/Science Trans Med Follow Up/test2A.xlsx")

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

如果您对合并结果感兴趣,可以使用
write.xlsx()
中的
sheetName
选项创建一个包含多张工作表的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)
  }
有关
list.files()
功能,请参阅
list.files
(或
dir
)的帮助功能。
pattern
选项指定一个正则表达式,该表达式可用于仅选择数据文件。例如,如果六个数据文件看起来像“FlowFile001.xlsx”、“FlowFile002.xlsx”、“FlowFile006.xlsx”,那么指定这些文件的正则表达式模式可以是“Flow.*.xlsx$”。(如果不熟悉正则表达式,请查阅
regex
,了解正则表达式的世界。)


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

跳过空白行,David,这非常有用,谢谢!将两个测试的P值放在同一张表上实际上更容易。就“”而言,您能否指定参数的含义?那是我文件的位置吗?请原谅,我一般对循环不是很熟悉!很高兴知道它有帮助。如果您想使用R(或任何编程语言/环境)自动化分析,那么绝对值得学习基本循环和
应用
函数系列。我添加了一个编辑来详细说明“
”占位符的性质。
  dataPath <- dirname(file.choose())