I am using this (ill advised, I know) solution to automatically name Excel files when uploading a folder.
temp = list.files(pattern="*.csv")
list2env(
lapply(setNames(temp, make.names(gsub("*.csv$", "", temp))),
read.csv), envir = .GlobalEnv)
Now, make.names uses . to make correct names, while I would rather use _. What would be the best way to dynamically change the dots to underscores?
I tried to do something like lapply(ls(),gsub(".", "_")), but that does not seem to work.
I would also prefer to do it within list2env, but I'll settle for a separate line.
CodePudding user response:
The issue is probably that use you use "." which in a regex matches every character. If you want to match a . in a string you have to escape it using use "\\.".
Personally I don't like it to wrangle all code in one line when you could use a simple function to make the code cleaner and more understandable.
# 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"
