Самый быстрый способ сделать это, вероятно, использовать gsub()
.
fileName <- '../DATA/Cats.2017.csv'
dat <- read.csv(fileName)
write.csv(dat, paste0(gsub('.csv', '.NEW.csv', fileName)))
Вот результаты rbenchmark
, хотя я хочу отметить, что вычислительное время между этими тремяметоды практически ничтожны, если вы выполняете этот код менее 1000 раз.
fileName <- "../DATA/Cats.2017.csv"
rbenchmark::benchmark(
'str_sub' = {
newName <- paste0(stringr::str_sub(fileName, 1, -4), "NEW.csv")
},
'stringi' = {
newName <- paste0(paste(unlist(stringi::stri_split_fixed(basename(fileName), ".", n = 3))[-3], collapse = "."), ".NEW.csv")
},
'gsub' = {
newName <- paste0(gsub('.csv', '.NEW.csv', fileName))
},
replications = 100000
)
test replications elapsed relative user.self sys.self user.child sys.child
3 gsub 100000 0.81 1.000 0.82 0 NA NA
1 str_sub 100000 1.10 1.358 1.10 0 NA NA
2 stringi 100000 1.67 2.062 1.67 0 NA NA