有没有一种方法可以自动更改我的文件路径并在R中应用函数



我希望使用R将"multiple_sounds"函数应用于文件夹中的.WAV文件列表。这是我当前的代码:

##### 1 #####
setwd("E:/Audiomoth Files/Winter/Rural/Emma/_1")
multiple_sounds(directory = "E:/Audiomoth Files/Winter/Rural/Emma/_1", resultfile = "ndsi_results.csv", soundindex = "ndsi", no_cores = "-2")
multiple_sounds(directory = "E:/Audiomoth Files/Winter/Rural/Emma/_1", resultfile = "adi_results.csv", soundindex = "acoustic_diversity", no_cores = "-2")
multiple_sounds(directory = "E:/Audiomoth Files/Winter/Rural/Emma/_1", resultfile = "aei_results.csv", soundindex = "acoustic_evenness", no_cores = "-2")
multiple_sounds(directory = "E:/Audiomoth Files/Winter/Rural/Emma/_1", resultfile = "aci_results.csv", soundindex = "acoustic_complexity", no_cores = "-2")
multiple_sounds(directory = "E:/Audiomoth Files/Winter/Rural/Emma/_1", resultfile = "H_results.csv", soundindex = "bioacoustic_index", no_cores = "-2")
##### 2 #####
setwd("E:/Audiomoth Files/Winter/Rural/Emma/_2")
multiple_sounds(directory = "E:/Audiomoth Files/Winter/Rural/Emma/_2", resultfile = "ndsi_results.csv", soundindex = "ndsi", no_cores = "-2")
multiple_sounds(directory = "E:/Audiomoth Files/Winter/Rural/Emma/_2", resultfile = "adi_results.csv", soundindex = "acoustic_diversity", no_cores = "-2")
multiple_sounds(directory = "E:/Audiomoth Files/Winter/Rural/Emma/_2", resultfile = "aei_results.csv", soundindex = "acoustic_evenness", no_cores = "-2")
multiple_sounds(directory = "E:/Audiomoth Files/Winter/Rural/Emma/_2", resultfile = "aci_results.csv", soundindex = "acoustic_complexity", no_cores = "-2")
multiple_sounds(directory = "E:/Audiomoth Files/Winter/Rural/Emma/_2", resultfile = "H_results.csv", soundindex = "bioacoustic_index", no_cores = "-2")

这是可行的,但目前我必须每次为每个文件夹(_1、_2、_3等(复制和粘贴此代码,其中有623个,因此手动操作非常耗时。

有没有一种方法可以自动更改文件路径,将目录自动更改为_3、_4、_5,并将函数循环应用到第623个文件夹?

提前感谢

我建议编写一个实用程序函数,并使用目录作为输入:

apply_wav_index = function(
dir,
index = c("ndsi", "acoustic_diversity", "acoustic_evenness", "acoustic_complexity", "bioacoustic_index"),
labels = c("ndsi", "adi", "aei", "aci", "H"),
...
) {
if(length(index) != length(labels)) stop("Must provide same number of labels and indexes")
for(i in seq_along(index)) {
multiple_sounds(
directory = dir,
resultfile = paste0(dir, "/", labels[i], "_results.csv"),
soundindex = index[i],
...
)
}
}

那么你应该可以这样称呼它:

for(i in 1:6) {
apply_wav_index(dir = paste0("E:/Audiomoth Files/Winter/Rural/Emma/_", i), no_cores = "-2")
}

您还可以使用list.dirs()生成目录列表。