编写具有模式匹配的for循环

时间:2019-02-18 13:22:26

标签: r for-loop pattern-matching

我不确定是否曾经讨论过该主题,但是我只能使用pattern =字符找到类似的问题。

我正在基于具有以下模式名称的文件创建不同的百分比表:"accuracycollar4136*_4136*.0.*.csv"-are *是整数(例如1、2、3等)。所有这些文件都在同一文件夹中。

我想创建一个for循环,该循环将基于"accuracycollar4136*_4136*.0.*.csv"文件的每个百分比表以csv格式编写。

在csv中为单个"accuracycollar4136*_4136*.0.*.csv"文件编写百分比表时,这是我的代码,这里以"accuracycollar41361_41365.0.7.csv"为例:

setwd("C:/Users/Juan/Desktop/KNN/41361_by_41365")

files = as.list(list.files(path = "C:/Users/Juan/Desktop/KNN/41361_by_41365"))
miss_class = lapply(files, function(x){
  data = read.csv("accuracycollar41361_41365.0.7.csv",header=T)
  miss<-prop.table(table(data$observed,data$predicted),margin=1)
})

write.csv(miss,file="classification_table_41361_by_41365.0.7.csv")

输出:

              Grazing     Head-up     Unknown   Vigilance
Grazing   0.291666667 0.583333333 0.020833333 0.104166667
Grooming  0.750000000 0.000000000 0.000000000 0.250000000
Head-up   0.331168831 0.538961039 0.006493506 0.123376623
Moving    0.000000000 0.923076923 0.000000000 0.076923077
Unknown   0.250000000 0.750000000 0.000000000 0.000000000
Vigilance 0.444444444 0.333333333 0.000000000 0.222222222

现在,对于每个与名称模式for匹配的文件,我如何通过"accuracycollar4136*_4136*.0.*.csv"循环自动执行相同的过程?

我知道有一个pattern=字符,但是在模式的某些部分可变的情况下无法使用。

感谢任何输入!


P.S。 (更新):我一直在尝试基于以前的脚本进行类似的操作,但是没有任何输出。我在正确的轨道上吗?

setwd("C:/Users/Juan/Desktop/KNN/41361_by_41365")

f <- list.files(full.names = F, pattern = "accuracycollar413")

dfs <- list()
for(i in 1:length(f))

miss_class = lapply(files, function(x){
  data = read.csv(f,header = TRUE)
  miss<-prop.table(table(data$observed,data$predicted),margin=1)

write.csv(miss,file="classification_table",i,"csv",sep=".")
})

1 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情。

setwd("C:/Users/Juan/Desktop/KNN/41361_by_41365")

files <- list.files(path = "C:/Users/Juan/Desktop/KNN/41361_by_41365")
files <- files[which(regexpr("accuracycollar4136\\d_4136\\d.0.\\d.csv", files) == 1)]
for(i in files){
  data <- read.csv(i, header=TRUE)
  miss <- prop.table(table(data$observed, data$predicted), margin=1)
  write.csv(miss, file = sub("accuracycollar", "classification_table_", i))
}