如何获取R会话中已加载data.frame的名称并将其存入变量
问题原因说明
你原始代码无法输出正确结果的核心原因是:ls()函数返回的是当前环境中所有对象的字符串类型名称,而非对象本身。你直接对字符串变量y执行is.data.frame()判断,相当于判断字符串是否属于数据框类型,永远会返回FALSE,因此不会有任何匹配结果。
问题1:仅打印当前环境中的data.frame对象
循环写法
和你原始的循环逻辑兼容,仅需补充get()函数把字符串名称转换为对应对象即可:
for (obj_name in ls()) { if (is.data.frame(get(obj_name))) { print(obj_name) } }
简洁向量化写法
无需显式写循环,一行代码即可完成打印:
print(Filter(function(x) is.data.frame(get(x)), ls()))
问题2:将data.frame名称列表存入变量
直接将上述筛选逻辑的结果赋值给目标变量即可,最终得到的是存储所有数据框名称的字符向量:
# 筛选全局环境中的所有数据框名称,存入df_names变量 df_names <- Filter(function(x) is.data.frame(get(x)), ls(envir = .GlobalEnv))
如果需要筛选其他环境的对象,修改ls()的envir参数为目标环境即可。
内容的提问来源于stack exchange,提问作者pdeli
相关产品推荐
相关产品推荐

