R语言循环读取多文件时重复写入同一数据的问题求助
问题分析与解决方案
你代码的核心问题根本不是paste0或者文件副本,而是循环里硬写了索引1,导致每次迭代都只读取文件夹里的第一个文件:
看你这两段循环代码:
indoor_data <- for(i in 1:length(indoor)){ assign(paste0("data", i), read_csv(paste0("", indoor[1]))) # 这里用了indoor[1],永远读第一个文件 } outdoor_data <- for(i in 1:length(outdoor)){ assign(paste0("data", i), read_csv(paste0("", outdoor[1]))) # 同样,永远读第一个文件 }
修正代码(先解决重复读文件的问题)
把indoor[1]改成indoor[i],outdoor[1]改成outdoor[i],这样循环时会按迭代的索引读取对应文件,另外建议给变量加前缀区分室内室外,避免重名覆盖:
library(DescTools) library(dplyr) library(readr) indoor <- list.files("indoor", full.names = TRUE) outdoor <- list.files("outdoor", full.names = TRUE) # 修正后的室内文件读取循环 for(i in 1:length(indoor)){ assign(paste0("indoor_data", i), read_csv(indoor[i])) } # 修正后的室外文件读取循环 for(i in 1:length(outdoor)){ assign(paste0("outdoor_data", i), read_csv(outdoor[i])) }
更规范的R写法(推荐)
用assign创建一堆零散变量后续处理很麻烦,建议用lapply把所有文件读取后存成列表,方便后续做日期重叠分析:
# 读取所有室内文件到列表 indoor_data_list <- lapply(indoor, read_csv) # 给列表元素命名,方便识别对应文件 names(indoor_data_list) <- basename(indoor) # 读取所有室外文件到列表 outdoor_data_list <- lapply(outdoor, read_csv) names(outdoor_data_list) <- basename(outdoor)
这样后续分析日期重叠时,直接遍历列表即可,比如要对比室内每个文件和室外每个文件的日期重叠,用嵌套循环遍历两个列表就行。
内容的提问来源于stack exchange,提问作者bigchungus81
相关产品推荐
相关产品推荐

