【发布时间】:2017-01-18 15:34:31
【问题描述】:
我有多个音频文件,它们保存在我工作目录的多个子文件夹中。我有一个循环读取每个文件的第一分钟,然后将它们保存为新文件。
library(tuneR)
dir.create("New files")
FILES<-list.files(PATH, pattern = "audio", recursive = TRUE)
for(i in 1:length(FILES)){
OneMIN <- readWave(FILES[i], from = 0, to = 60, units = "seconds")
writeWave(OneMIN, filename = (file=paste0(FILES[i], "_1-min.wav")))
}
现在,这有几个问题;
1) 新文件被称为例如“File1.wav_1-min.wav”,所以我需要将它们重命名为“File_1-min.wav”
2) 新文件位于多个子文件夹中,然后我必须使用循环外的其他步骤将它们复制到“新文件”文件夹中。
我有解决这些问题的变通方法,但我确信有一种更优雅的方法可以解决这些问题,即在循环中包含额外的行。我想:
1) 去掉文件名中的第一个“.wav”
2) 自动将它们保存到“新文件”文件夹中
但是,我不知道该怎么做。任何建议表示赞赏。谢谢。
【问题讨论】:
-
fillesOut <- sub("\\.wav$", "", FILES)应该适用于第一部分。paste0("./NewFiles/", filesOut[i], "_1-min.wav")应该获得第二个。另请参阅dir.create以在 R 中创建目录,但如果这是一次性的,您可以手动进行。还有exists用于检查对象的存在。 -
@lmo,第一部分运行良好,但第二部分出现错误;
Error in file(filename, "wb") : cannot open the connection In addition: Warning message: In file(filename, "wb") : cannot open file './Newfiles/2017-01-05/File1_1 min.wav': No such file or directory -
看我评论的后半部分。见
?dir.create。