如何在R函数内部获取对象名称字符串以修改数据框列名
解决函数内获取数据框名称并修改列名覆盖原对象的问题
你的问题出在修改数据框之后才调用deparse(substitute(x)),此时x已被重新赋值为修改后的数据框,substitute(x)无法捕获原始的对象名称字符串。
正确的做法是在函数开头先获取原始对象名称,再执行列名修改和赋值操作:
df <- data.frame( emp_id = c (1:5), emp_name = c("Rick","Dan","Michelle","Ryan","Gary"), stringsAsFactors = FALSE ) rename_fun <- function(x) { # 先获取原始对象名称,放在函数最开头 obj_name <- deparse(substitute(x)) # 修改列名 colnames(x)[1] <- "___0" colnames(x)[2] <- "___1" # 覆盖全局环境中的原对象 assign(obj_name, x, envir = .GlobalEnv) } rename_fun(df)
调用后查看df列名验证结果:
colnames(df) # 输出:[1] "___0" "___1"
另外,更符合R函数常规写法的方式是直接返回修改后的数据框,由用户手动赋值覆盖原对象(避免直接操作全局环境):
rename_fun2 <- function(x) { colnames(x)[1] <- "___0" colnames(x)[2] <- "___1" return(x) } # 使用时手动赋值覆盖原对象 df <- rename_fun2(df)
内容的提问来源于stack exchange,提问作者gili
相关产品推荐
相关产品推荐

