遍历全局环境并将数据框重命名为小写字母,没有特殊字符(在 R 中)
looping through the global environment and rename the dataframes to lowercase with no special characters (in R)
在提出以下问题之前,我查看了 this, and this 讨论:
在我的全局环境中,我有数据集、列表和其他向量。我想删除所有特殊字符并应用 tolower()
函数 globally 到这些数据框。
因此,名为 TTxxSSS
的数据集将为 ttxxsss
。名为 çã
的数据集将是 ca
.
-我想我必须循环遍历环境对象并仅重命名数据集。
-我可以推广到其他任务的解决方案将是惊人的(即 trim 名称等)。那是代码:
ds1_01_HaPpy <- data.frame(x=rep(10,10))
df_02_PÇaPp6 <- data.frame(x=rep(10,10))
df_ZzZzzzzZZ <- data.frame(x=rep(10,10))
x <- c(12,3)
a <- list("a","b" ,"c")
谢谢
遍历名称并对每个数据框进行音译并转换为小写。如果这导致名称与原始名称不同并且新名称不存在,则默认情况下发出消息并重命名。
有参数可用于关闭消息(详细),允许覆盖现有对象(覆盖),
允许处理以点开头的名称(全部)并在不进行任何更改的情况下对其进行测试(测试)。
clean_dfs <- function(envir = .GlobalEnv, all = FALSE,
overwrite = FALSE, test = FALSE, verbose = TRUE) {
for(nm in ls(all = all, envir)) {
.tmp <- get(nm, envir)
if (is.data.frame(.tmp)) {
newnm <- tolower(iconv(nm, to = "ASCII//TRANSLIT"))
if (nm != newnm) {
if (exists("newnm", envir) && !overwrite) {
warning(newnm, " already exists -- ", nm, " not renamed")
} else {
if (verbose) cat("renaming", nm, "to", newnm, "\n")
if (!test) {
assign(newnm, .tmp, envir)
rm(list = nm, envir = envir)
}
}
}
}
}
}
测试一下,然后 运行 它。
# test without making any changes
clean_dfs(test = TRUE)
## renaming df_02_PÇaPp6 to df_02_pcapp6
## renaming df_ZzZzzzzZZ to df_zzzzzzzzz
## renaming ds1_01_HaPpy to ds1_01_happy
ls() # unchanged
## [1] "a" "clean_dfs" "df_02_PÇaPp6" "df_ZzZzzzzZZ" "ds1_01_HaPpy"
## [6] "x"
# now run it for real
clean_dfs()
## renaming df_02_PÇaPp6 to df_02_pcapp6
## renaming df_ZzZzzzzZZ to df_zzzzzzzzz
## renaming ds1_01_HaPpy to ds1_01_happy
ls()
## [1] "a" "clean_dfs" "df_02_pcapp6" "df_zzzzzzzzz" "ds1_01_happy"
## [6] "x"
在提出以下问题之前,我查看了 this, and this 讨论:
在我的全局环境中,我有数据集、列表和其他向量。我想删除所有特殊字符并应用 tolower()
函数 globally 到这些数据框。
因此,名为 TTxxSSS
的数据集将为 ttxxsss
。名为 çã
的数据集将是 ca
.
-我想我必须循环遍历环境对象并仅重命名数据集。
-我可以推广到其他任务的解决方案将是惊人的(即 trim 名称等)。那是代码:
ds1_01_HaPpy <- data.frame(x=rep(10,10))
df_02_PÇaPp6 <- data.frame(x=rep(10,10))
df_ZzZzzzzZZ <- data.frame(x=rep(10,10))
x <- c(12,3)
a <- list("a","b" ,"c")
谢谢
遍历名称并对每个数据框进行音译并转换为小写。如果这导致名称与原始名称不同并且新名称不存在,则默认情况下发出消息并重命名。
有参数可用于关闭消息(详细),允许覆盖现有对象(覆盖), 允许处理以点开头的名称(全部)并在不进行任何更改的情况下对其进行测试(测试)。
clean_dfs <- function(envir = .GlobalEnv, all = FALSE,
overwrite = FALSE, test = FALSE, verbose = TRUE) {
for(nm in ls(all = all, envir)) {
.tmp <- get(nm, envir)
if (is.data.frame(.tmp)) {
newnm <- tolower(iconv(nm, to = "ASCII//TRANSLIT"))
if (nm != newnm) {
if (exists("newnm", envir) && !overwrite) {
warning(newnm, " already exists -- ", nm, " not renamed")
} else {
if (verbose) cat("renaming", nm, "to", newnm, "\n")
if (!test) {
assign(newnm, .tmp, envir)
rm(list = nm, envir = envir)
}
}
}
}
}
}
测试一下,然后 运行 它。
# test without making any changes
clean_dfs(test = TRUE)
## renaming df_02_PÇaPp6 to df_02_pcapp6
## renaming df_ZzZzzzzZZ to df_zzzzzzzzz
## renaming ds1_01_HaPpy to ds1_01_happy
ls() # unchanged
## [1] "a" "clean_dfs" "df_02_PÇaPp6" "df_ZzZzzzzZZ" "ds1_01_HaPpy"
## [6] "x"
# now run it for real
clean_dfs()
## renaming df_02_PÇaPp6 to df_02_pcapp6
## renaming df_ZzZzzzzZZ to df_zzzzzzzzz
## renaming ds1_01_HaPpy to ds1_01_happy
ls()
## [1] "a" "clean_dfs" "df_02_pcapp6" "df_zzzzzzzzz" "ds1_01_happy"
## [6] "x"