在工作环境中使用 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"
我正在使用 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"