R语言:如何在for循环中用i指代chr_i数据框并获取其维度?
批量获取多个命名数据框的维度(R语言)
你遇到的问题是:paste0生成的是变量名的字符串,而非实际的数据框对象,直接调用dim()只会计算字符串的长度,而非数据框的维度。以下是两种可行的解决方法:
方法一:修改循环,用get()获取数据框对象
通过get()函数,你可以根据字符型的变量名,提取出对应的data frame对象,再调用dim():
for (i in 1:22) { df_name <- paste0('chr_', i) # 根据变量名字符串获取实际的数据框 target_df <- get(df_name) # 打印维度,格式更清晰 cat(sprintf("数据框 %s 的维度:%d 行 × %d 列\n", df_name, dim(target_df)[1], dim(target_df)[2])) }
方法二:批量获取到列表,高效处理
如果不想手动指定1到22的范围,可以用ls()结合正则表达式筛选变量名,再用mget()批量把数据框存入列表,之后批量处理:
# 筛选所有以chr_开头、后面跟数字的变量名 chr_names <- ls(pattern = "^chr_\\d+$") # 批量获取这些变量对应的data frame,存入列表 chr_df_list <- mget(chr_names) # 方法1:遍历列表打印维度 for (name in names(chr_df_list)) { cat(sprintf("数据框 %s 的维度:%s\n", name, paste(dim(chr_df_list[[name]]), collapse = " × "))) } # 方法2:用sapply直接输出所有维度(更简洁) sapply(chr_df_list, dim)
注意事项
如果你的数据框不在全局环境(比如在某个自定义函数的环境中),需要给get()或mget()指定envir参数,例如get(df_name, envir = environment())。
内容的提问来源于stack exchange,提问作者Johnny
相关产品推荐
相关产品推荐

