Hi all, Thanks very much for your help! You are correct in thinking the list is the same as before, actually, my question was more about how to do the next steps, where I needed to match the filenames of the files in my directory with old (i.e current) and new file name prefixes in my list. For each match I then wanted to rename the original file using the corresponding new filename prefix from the list.
Sorry for being a bit confusing, I didn't post my first attempt to do this at first as my code just didn't work at all, but I have had another go using a matrix instead and I think this does the job. old_path="./old/" new_path="./new/" old_names <- list.files(old_path) head(old_names) oldnames=c('1002', '1003') newnames=c('1002_new', '1003_new') mapping=cbind(oldnames,newnames) head(mapping) for (i in old_names){ temp <- unlist(strsplit(i, "[.]"))[1] n <- which(is.element(mapping,temp)) if(length(n)>0) { #copy the file to the new folder #re name it and the name is paste(mapping[n,2], '.xls', sep="") print(paste(mapping[n,2], '.xls', sep="")) newnames <- paste(mapping[n,2], '.xls', sep="") file.copy(from = paste(old_path, i, sep=""), to = paste(new_path, newnames)) } } On 23 January 2017 at 13:28, Luanna Dixson <justanotherdigress...@gmail.com> wrote: > I need to rename a bunch of files, by searching for string matches in a > list. Each list element containings a character with the old filename that > I want to match to, and the new file name that I want to rename by. > > For instance, here filename '1001.xls' should match to list[[1]]$oldname > and I want to rename it to 'newa.xls' from list[[1]]$newname. > > The actual new file names I have will feature a random alphanumeric number > and the list will have a length of ~600. > > > # files I want to rename > > files with old file name =c('1001.xls', '1002.xls') > > # list with old file names and new file names > > oldnames=c('1001', '1002', '1003') > > newnames=c('newa', 'newb', 'newc') > > df=data.frame(oldnames,newnames) > > list <- split(df, rownames(df)) > > > # turn list elements in character > > for(i in 1:length(list)) list[[i]]$oldnames=as. > character(list[[i]]$oldnames) > > for(i in 1:length(list)) list[[i]]$newnames=as. > character(list[[i]]$newnames) > > > I heard that it would be better to vectorize this than trying to do a > double loop so if someone could give me a hint about how to do this I would > be very grateful! > [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.