在 R 中检索加载数据对象的原始文件名
retrieve original file name of loaded data object in R
我正在尝试检索存储在 R 中的对象的原始文件名。原因是因为在对数据对象进行修改后,我想在文件名中使用相同的前缀来保存新对象。这就是我的意思:
dat <- read.csv("../DATA/Cats.2017.csv")
对dat做一堆分析使dat.new并使用原始前缀保存文件:
write.csv(dat.new, file="../DATA/Cats.2017.NEW.csv"
我试图避免在每次加载另一个 csv 文件时手动更改文件名。我希望这是有道理的,并且有一个简单的解决方案!
最简单的方法可能是这样的:
orig_name <- "../DATA/Cats.2017.csv"
dat <- read.csv(orig_name)
# your analysis here
new_name <- paste0(stringr::str_sub(basename(orig_name), 1, -4), ".NEW.csv")
write.csv(dat.new, new_name)
您可以尝试这样的操作:
file_path <- "path/to/my/file/tmm/1.file.csv"
file_name <- basename(file_path)
sp <- unlist(strsplit(file_name, '\.'))
file_prefix <- paste0(sp[-length(sp)], collapse = '.')
new_file_name <- paste0(file_prefix, ".NEW.csv")
最快的方法可能是使用 gsub()
。
fileName <- '../DATA/Cats.2017.csv'
dat <- read.csv(fileName)
write.csv(dat, paste0(gsub('.csv', '.NEW.csv', fileName)))
这是 rbenchmark
结果,但我确实想指出,如果您 运行 此代码少于 1,000 次,这三种方法之间的计算时间几乎可以忽略不计。
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
我正在尝试检索存储在 R 中的对象的原始文件名。原因是因为在对数据对象进行修改后,我想在文件名中使用相同的前缀来保存新对象。这就是我的意思:
dat <- read.csv("../DATA/Cats.2017.csv")
对dat做一堆分析使dat.new并使用原始前缀保存文件:
write.csv(dat.new, file="../DATA/Cats.2017.NEW.csv"
我试图避免在每次加载另一个 csv 文件时手动更改文件名。我希望这是有道理的,并且有一个简单的解决方案!
最简单的方法可能是这样的:
orig_name <- "../DATA/Cats.2017.csv"
dat <- read.csv(orig_name)
# your analysis here
new_name <- paste0(stringr::str_sub(basename(orig_name), 1, -4), ".NEW.csv")
write.csv(dat.new, new_name)
您可以尝试这样的操作:
file_path <- "path/to/my/file/tmm/1.file.csv"
file_name <- basename(file_path)
sp <- unlist(strsplit(file_name, '\.'))
file_prefix <- paste0(sp[-length(sp)], collapse = '.')
new_file_name <- paste0(file_prefix, ".NEW.csv")
最快的方法可能是使用 gsub()
。
fileName <- '../DATA/Cats.2017.csv'
dat <- read.csv(fileName)
write.csv(dat, paste0(gsub('.csv', '.NEW.csv', fileName)))
这是 rbenchmark
结果,但我确实想指出,如果您 运行 此代码少于 1,000 次,这三种方法之间的计算时间几乎可以忽略不计。
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