将脚本应用于子文件夹并相应地命名结果的循环--R [英] loop for applying script to sub-folders and name results accordingly --R
问题描述
我有一个脚本来针对一个文件夹中的任何现有火车.csv文件获取test-results.csv文件的corssproduct
I have a script to get corssproduct of test-results.csv file against any exsiting train .csv file in one folder
已编辑-添加了一些更正
Edited -- some corrections added
mytest <- function(data) {
data01 <- as.matrix(read.csv(file = "test/test-results.csv", sep = ",", header=FALSE))
data02 <- as.matrix(read.csv(file = data, sep = ",", header=FALSE))
test <- list()
test01<- list()
test02<- list()
i<- 1
while (i <= 25){
test01[[i]] <- c(data01[i, ])
test02[[i]] <- c(data02[i, ])
test[[i]]<- crossprod(test01[[i]],test02[[i]])
i <- i+1
}
return(mytest)
}
result <- lapply(list.files(pattern='^tain.*\\.csv', recursive=TRUE, full.names = TRUE),test)
for (i in seq(length(result))) {
write.csv(do.call(cbind,result),'result.csv', row.names = FALSE)
}
我有几个结构相同的文件夹
I have few folders with same structure
Main|experiment 01|test|test-results.csv, train01.csv, train02.csv, train03.csv
Main|experiment 02|test|test-results.csv, train01.csv, train02.csv
我现在想创建一个脚本,以便将相同的脚本应用于所有这些文件夹并返回结果(例如results-experiment01.csv
),而不是将它们应用100次
I now want to create a script if possible to apply the same script to all of those folders and return the results (e.g. results-experiment01.csv
) instead of applying them 100 times
抱歉,这看起来很可怕... R中的新功能
sorry if this looks horrible ... new in R
推荐答案
如果仅使用dir
或list.files
进行调用,您会得到一个文件列表作为字符向量(例如下面的示例中的dirlist
)
lets say with just plain dir
or list.files
call with recursive = TRUE
you get a file list as character vector (like dirlist
in example below)
> dirlist
[1] "Main/experiment 01/test/a.csv" "Main/experiment 02/test/b.csv" "Main/experiment 02/test/d.txt" "Main/experiment 02/dummy/a.csv"
[5] "temp1.csv" "Main/temp2.csv"
您可以使用以下正则表达式对该向量进行子集
You can subset this vector using regular expressions as follows
> csvfiles <- dirlist[grepl('.*(experiment [0-9]+)/test/.*\\.csv', dirlist)]
> csvfiles
[1] "Main/experiment 01/test/a.csv" "Main/experiment 02/test/b.csv"
然后,您可以再次使用正则表达式来获得结果名称.
Then you can get result names using regex again on this.
> resultsnames <- paste('result_', gsub('.*(experiment [0-9]+)/test/.*\\.csv','\\1', csvfiles), sep="")
> resultsnames
[1] "result_experiment 01" "result_experiment 02"
这篇关于将脚本应用于子文件夹并相应地命名结果的循环--R的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!