R语言如何使用fread一次性批量读取多个文件并赋值
R批量读取snplist文件并按规则赋值方案
方案1:自动生成a1~a22独立变量(和手动逐行写代码效果完全一致)
先确认所有.snplist文件存放在R当前工作目录下,可通过getwd()查看当前路径,用setwd("你的文件实际存放路径")切换到目标目录后,运行以下代码即可:
library(data.table) for (i in 1:22) { # 拼接对应序号的文件名 current_file <- paste0(i, ".snplist") # 读取文件并动态赋值给a1、a2...a22变量 assign(paste0("a", i), fread(current_file)) }
运行结束后工作环境中会直接生成a1到a22共22个变量,和你逐行手写a1 <- fread('1.snplist')的结果没有区别。
方案2:读取到命名列表统一管理(更推荐的规范写法)
如果后续需要对所有文件做批量处理,散列的独立变量会增加重复代码量,更推荐把所有读取结果存入统一列表:
library(data.table) # 生成1-22对应的文件名向量 file_paths <- paste0(1:22, ".snplist") # 批量读取所有文件 snp_data_list <- lapply(file_paths, fread) # 给列表元素命名,和a1~a22一一对应 names(snp_data_list) <- paste0("a", 1:22)
需要调用对应文件内容时,直接用snp_data_list$a1、snp_data_list$a2即可,和独立变量使用体验一致,还支持直接用lapply对所有文件做批量操作(比如统一筛选列、统计行数、合并数据等),避免写大量重复代码。
适配非固定序号文件的写法
如果你的文件不是严格按1~22命名,或者路径下还有其他.snplist后缀的文件需要读取,可以自动匹配路径下所有符合后缀要求的文件,不需要手动写序号范围:
library(data.table) # 自动识别当前路径下所有以.snplist结尾的文件 all_snp_files <- list.files(pattern = "\\.snplist$") # 批量读取 snp_data_list <- lapply(all_snp_files, fread) # 按文件名(去掉后缀)给列表元素命名 names(snp_data_list) <- gsub("\\.snplist$", "", all_snp_files)
如果需要给fread传递额外读取参数(比如指定无表头、分隔符、跳过行数等),直接在lapply中追加即可,例如:lapply(all_snp_files, fread, header = FALSE, sep = "\t")。
内容的提问来源于stack exchange,提问作者Muhammad
相关产品推荐
相关产品推荐

