Причина, по которой вы получаете предупреждение «аргумент« замена »имеет длину> 1 и будет использоваться только первый элемент», заключается в том, что вы предоставляете n
- вектор вида c(1, 2, ...)
-в качестве строки для замены подстроки, соответствующей вашему регулярному выражению ^.{3}
.
Если то, что вы хотите сделать, это заменить первые три символа каждого имени файла на число, которое вы можете отсортировать, вот один из способов сделать это (комментарии объясняют каждый шаг):
# the files to be renamed
fnames <- list.files()
# new prefixes to add: '001', '002', '003', etc.
# (note usage of sprintf() to get left-padding for nice sorting)
fname_prefixes <- sprintf("%03d", seq_along(fnames))
# sub the i-th prefix for the first three characters of the i-th filename
new_fnames <- Map(function(fname, idx) gsub("^.{3}", idx, fname),
fnames, fname_prefixes)
Затем вы можете переименовать каждый файл, перебирая именованный список new_fnames
:
for (idx in seq_along(new_fnames)){
# can show a message so you can track what's going on
message('renaming ', names(new_fnames)[idx], ' to: ', new_fnames[[idx]])
file.rename(from=names(new_fnames)[idx], to=new_fnames[[idx]])
}