首页 > 解决方案 > 如何在 R 中使用 for 循环为多个 .csv 文件运行相同的代码?

问题描述

我编写了一个代码来过滤、分组和排序我的大型数据文件。我有多个文本文件需要分析。我知道我可以复制代码并使用新数据运行它,但我想知道是否有一种方法可以将其放入 for 循环中,该循环将一个一个地打开文本文件并运行并存储结果。我使用以下内容加载我的所有文本文件。在接下来的步骤中,我选择列并过滤它们以找到所需的值。但目前它只读取一个文件。我想从所有数据文件中获取结果。

Samples <- Sys.glob("*.csv")
for (filename in Samples) {
try <- read.csv(filename, sep = ",", header = FALSE)
shear <- data.frame(try[,5],try[,8],try[,12])
lane <- shear[which(shear$Load == "LL-1"),]
Ext <- subset(lane, Girder %in% c("Left Ext","Right Ext"))
Max.Ext <- max(Ext$Shear)
}

标签: r

解决方案


您可以将要应用于每个文件的所有内容放在一个函数中:

apply_fun <- function(filename) {

  try <- read.csv(filename, sep = ",", header = FALSE)
  shear <- data.frame(try[,5],try[,8],try[,12])
  lane <- shear[which(shear$Load == "LL-1"),]
  Ext <- subset(lane, Girder %in% c("Left Ext","Right Ext"))
  return(max(Ext$Shear, na.rm = TRUE))
}

在这里,我们似乎只需要max每个文件中的一个数字 ( ),我们可以使用sapply该函数将函数应用于每个文件。

Samples <- Sys.glob("*.csv")
sapply(Samples, apply_fun)

推荐阅读