R语言for循环仅处理最后一个文件的问题求助
问题原因
你的代码里,text和tokens变量在每次循环中都会被重新赋值,前4次循环的结果会被后续循环覆盖,所以最后只保留了最后一个文件的处理结果。虽然控制台显示5次"Read 1 item",说明每个文件都被读取了,但结果没被保存下来。
解决方法
用列表来存储每个文件的处理结果,这样每个循环的输出都会被单独保存:
files <- dir('~/disciplines/demo/') metadata <- read.csv('~/disciplines/demo/metadata.csv') filenames <- metadata$id # 初始化空列表存储所有文件的分词结果 all_tokens <- list() for (i in 1:length(filenames)) { text <- scan(file=paste('~/disciplines/demo/folder/', filenames[i], '.txt', sep=''), what='char', sep='\n') tokens <- unlist(strsplit(text, '\\W+')) # 将当前文件的结果存入列表,用文件名做索引更直观 all_tokens[[filenames[i]]] <- tokens }
处理完成后,all_tokens列表会包含5个文件的所有分词结果,你可以通过all_tokens[[1]]或者all_tokens[["对应文件名"]]查看单个文件的结果。
如果想让代码更简洁,也可以用lapply替代for循环:
# 定义处理单个文件的函数 process_file <- function(file_id) { text <- scan(file=paste('~/disciplines/demo/folder/', file_id, '.txt', sep=''), what='char', sep='\n') unlist(strsplit(text, '\\W+')) } # 批量处理所有文件 all_tokens <- lapply(filenames, process_file) # 给列表元素命名,对应文件名 names(all_tokens) <- filenames
内容的提问来源于stack exchange,提问作者user21390049
相关产品推荐
相关产品推荐

