R语言for循环遍历数据框列表时如何提取各数据框的字符串名称
问题解法
首先你需要保证存储数据框的列表dflist本身带有名称属性,否则无法直接获取每个数据框对应的原名称。如果构造列表时未手动命名,可以用dplyr::lst()替代基础的list()构造列表,它会自动将变量名作为列表元素的名称:
# 构造带名称的dflist示例 library(dplyr) dflist <- lst(df1, df2, df3)
解法1:遍历列表名称(最常用,无额外依赖)
直接循环遍历dflist的名称向量,再通过名称取对应的数据框即可:
for (suffix in names(dflist)) { # 取当前循环对应的数据框 current_df <- dflist[[suffix]] print(suffix) # 后续操作逻辑 }
如果需要同时用到索引,也可以遍历索引再取对应名称:
for (i in seq_along(dflist)) { suffix <- names(dflist)[i] current_df <- dflist[[i]] print(suffix) # 后续操作逻辑 }
解法2:用purrr的imap函数(函数式编程风格)
如果习惯用tidyverse的函数式编程写法,imap会自动将元素值和元素名分别传入函数的两个参数,写法更简洁:
library(purrr) imap(dflist, \(current_df, suffix) { print(suffix) # 后续操作逻辑,返回需要的结果即可 })
原代码的问题本质上不是惰性求值导致的,核心原因是
for(i in dflist)的写法是直接遍历列表的元素值,i只是存储当前元素的临时变量,本身不携带原元素的名称信息,deparse(substitute(i))只能拿到临时变量的符号名"i",自然无法得到需要的原数据框名称。
内容的提问来源于stack exchange,提问作者Smallex
相关产品推荐
相关产品推荐

