У меня есть большое количество файлов .wav, которые мне нужно проанализировать с помощью акустических индексов из пакета «soundecology» в R. Однако записи не имеют одинакового времени начала, и мне нужно проанализировать определенные периоды времени в файлах. Я хочу создать функцию и цикл для автоматизации процесса. Я создал электронную таблицу для каждой папки с записями (каждая папка находится в другом месте), в которой указаны записи и время в каждой записи, которые мне нужно проанализировать. По сути, строка содержит: имя звукового файла, время, когда семпл должен начаться (например, 09:00:00, количество секунд от начала файла, в котором происходит это время, и количество секунд от начала время файла, в котором должен произойти конец выборки. Эти данные выглядят следующим образом: данные
Я использую пакет «tuneR» и «warbleR», чтобы выбрать определенную часть звукового файла, которую я хочу проанализировать. Вот код и вывод, который я хотел бы зациклить на всех звуковых файлах:
wavrow1 <-read_wave(mvb$sound.files[1], from = mvb$start[1], to = mvb$end[1])
wavrow1.aci <- acoustic_complexity(wavrow1, j=10)
что дает
max_freq not set, using value of: 22050
min_freq not set, using value of: 0
This is a mono file.
Calculating index. Please wait...
Acoustic Complexity Index (total): 934.568
Однако, когда я помещаю это в функцию, чтобы затем поместить ее в цикл, я получаю другой результат.
acianalyzeFUN <- function(mvb, i){
r <- read_wave(mvb$sound.files[i], mvb$start[i], mvb$end[i])
soundfile.aci <- acoustic_complexity(r, j=10)
}
row1.test <- acianalyzeFUN(mvb, 1)
Это дает результат:
max_freq not set, using value of: 22050
min_freq not set, using value of: 0
This is a mono file.
Calculating index. Please wait...
Acoustic Complexity Index (total): 19183.03
Acoustic Complexity Index (by minute): 931.98
Что отличается. Поэтому мне нужно исправить эту функцию и поместить ее в цикл, чтобы я мог применить ее ко всем файлам и сохранить результаты во фрейме данных или, в конечном счете, в другой электронной таблице.
Я думал, что цикл, подобный следующему, может работать, но я также получаю ошибки:
output <- vector("logical", length(97))
for (i in seq_along(mvb$sound.files)) {
output[[i]] <- acianalyzeFUN(mvb, i)
}
Который возвращает эту ошибку:
max_freq not set, using value of: 22050
min_freq not set, using value of: 0
This is a mono file.
Calculating index. Please wait...
Acoustic Complexity Index (total): 19183.03
Acoustic Complexity Index (by minute): 931.98
Error in output[[i]] <- acianalyzeFUN(mvb, i) :
more elements supplied than there are to replace
Спасибо за любую помощь и совет по этому поводу. Пожалуйста, дайте мне знать, если есть какая-либо другая информация, которая была бы полезна.