如何提取已重命名为变量的数据框(DataFrame)的原始名称?
我懂你这种烦恼——硬编码绘图标题不仅不够灵活,万一哪天改了原始数据框的名字,还得手动去改标题,太麻烦了。这里有几个实用的方法帮你自动提取原始数据框的名称,不用再硬编码:
方案一:给数据框添加属性记录原始名称
在复制数据框的时候,把原始数据框的名称存为数据框的属性,后续绘图直接读取这个属性即可:
# 创建原始数据框 a <- c(10,20,30,40) b <- c('book', 'pen', 'textbook', 'pencil_case') c <- c(TRUE,FALSE,TRUE,FALSE) d <- c(2.5, 8, 10, 7) orgdf <- data.frame(a,b,c,d) # 复制数据框并添加原始名称属性 newdf <- orgdf attr(newdf, "original_name") <- deparse(substitute(orgdf)) # 绘图时调用属性作为标题 plot(newdf$a, newdf$d, main = attr(newdf, "original_name"))
这里deparse(substitute(orgdf))的作用是把变量名orgdf转换成字符串,我们把它存在数据框的自定义属性里,后续随时可以调用。
方案二:用包装函数批量处理复制操作
如果你需要频繁复制数据框并保留原始名称,写个小函数能省不少事:
# 定义复制函数,自动记录原始名称 copy_with_original_name <- function(df) { new_df <- df attr(new_df, "original_name") <- deparse(substitute(df)) return(new_df) } # 使用函数复制数据框 newdf <- copy_with_original_name(orgdf) # 直接用属性作为标题绘图 plot(newdf$a, newdf$d, main = attr(newdf, "original_name"))
以后每次复制数据框,只要调用这个函数,就自动帮你完成名称记录,不用重复写属性赋值的代码。
补充说明:为什么不能直接用deparse(substitute(newdf))?
因为newdf是orgdf的副本,substitute(newdf)只会返回newdf这个当前变量名,而不是原始的orgdf。所以必须在复制的那一刻捕获原始数据框的名称并保存下来,后续才能调用。
内容的提问来源于stack exchange,提问作者Rachel Rotz
相关产品推荐
相关产品推荐

