R语言如何获取并返回动态名称的已加载dataframe变量
问题说明
当前目录下存放有data1.rda、data2.rda、data3.rda文件,规则为调用load("dataX.rda")会加载得到名为dataX的dataframe,所有.rda文件加载后遵循相同命名规则。
初始编写的加载返回函数代码如下:
returnData <- function(id) { load(paste0("data", id, ".rda")) return(paste0("data", id)) } data1 <- returnData(1)
该代码无法满足需求:函数返回的是字符串"data1",而非对应的dataframe实体对象。
问题原因
paste0("data", id)的输出结果是字符型值,本身不是R环境中绑定的dataframe对象;同时load()默认会把加载的对象存入当前调用环境,没有做显式提取的话,无法直接把加载出来的实体对象作为返回值输出。
修复代码
推荐使用隔离环境的写法,避免加载过程污染全局环境,同时正确提取对应对象返回:
returnData <- function(id) { # 创建独立临时环境存放加载的数据,避免环境冲突 temp_env <- new.env() # 构造文件路径加载到临时环境 data_file <- paste0("data", id, ".rda") load(data_file, envir = temp_env) # 按对象名从临时环境中提取实际dataframe返回 obj_name <- paste0("data", id) return(temp_env[[obj_name]]) } # 调用测试 data1 <- returnData(1)
如果追求代码简洁,也可以用get()函数直接获取函数环境内的加载对象:
returnData <- function(id) { obj_name <- paste0("data", id) load(paste0("data", id, ".rda"), envir = environment()) return(get(obj_name)) }
内容的提问来源于stack exchange,提问作者Canovice
相关产品推荐
相关产品推荐

