Как переименовать файлы, чтобы расширение файла не отображалось в имени, используя R - PullRequest
0 голосов
/ 21 марта 2020

Мой код R в настоящее время включает в себя циклический просмотр списка файлов .xlsm, преобразование данных на каждом листе в function, а затем вывод файлов в виде набора .xlsx файлов. Предположим, что мой Filelist состоит только из 2 файлов, т.е. Filelist = c("aaa.xlsm", "bbb.xlsm"), мой текущий код, указанный ниже, выведет файлы .xlsx с именами файлов "aaa.xlsm.xlsx" и "bbb.xlsm.xlsx" соответственно.

Filelist <- list.files(pattern = ".xlsm$") #extract list of files from folder that end with xlsm
lapply(Filelist, function(i) {
  df1 <- read_excel(i, sheet = "Trial1")
  df2 <- read_excel(i, sheet = "Trial2")
  df3 <- read_excel(i, sheet = "Trial3")
  df4 <- read_excel(i, sheet = "Trial4")
  write.xlsx(list(df1, df2, df3, df4), file = paste0('Out', i, '.xlsx'),
             sheetName = c("df1", "df2", "df3", "df4"))})

Как вместо этого вывести файлы как "aaa.xlsx" и "bbb.xlsx"? Я понимаю, что могу использовать функцию file.rename после того, как .xlsx файлы были выведены с неправильными именами, но я не могу получить правильный синтаксис для этого.

Filename <- list.files(pattern = ".xlsm.xlsx$")
Newname <- sub("^xlsm.xlsx$", "xlsx", Filename)
file.rename(Filename, Newname)

1 Ответ

1 голос
/ 21 марта 2020

Вы можете использовать tools::file_path_sans_ext и добавить расширение для непосредственного создания имени:

paste0(tools::file_path_sans_ext("aaa.xlm"), ".xlsx")
#> [1] "aaa.xlsx"
...