在工作环境中使用 make.names 或重命名对象时,用下划线替换点

Replacing dots with underscores, when using make.names or renaming obejcts in the working environment

我正在使用 this(不明智,我知道)解决方案在上传文件夹时自动命名 Excel 个文件。

temp = list.files(pattern="*.csv")
list2env(
  lapply(setNames(temp, make.names(gsub("*.csv$", "", temp))), 
         read.csv), envir = .GlobalEnv)

现在,make.names 使用 . 来命名,而我宁愿使用 _。将点动态更改为下划线的最佳方法是什么?

我尝试过 lapply(ls(),gsub(".", "_")) 之类的操作,但这似乎不起作用。 我也更愿意在 list2env 内完成,但我会选择单独一行。

问题可能是您使用 ".",它在正则表达式中匹配每个字符。如果你想匹配字符串中的 . 你必须使用 "\.".

来转义它

就我个人而言,我不喜欢在一行中处理所有代码,因为您可以使用一个简单的函数来使代码更清晰、更易于理解。

# Example data
write.csv(mtcars, "mt cars.csv")
write.csv(mtcars, "mt car s.csv")

temp = list.files(pattern="*.csv")

make_names <- function(x) {
  gsub("\.", "_", make.names(gsub("*.csv$", "", x)))
}
names(temp) <- make_names(temp)

list2env(lapply(temp, read.csv), envir = .GlobalEnv)
#> <environment: R_GlobalEnv>

ls()
#> [1] "make_names" "mt_car_s"   "mt_cars"    "temp"