R- 如何修复 R 中的内存问题?

R- how to fix memory issues in R?

老实说,我不太确定问题出在哪里,但我过去在 R 中遇到过类似的问题。我已经编写了代码来从 .dat 文件(特别是当前的面板调查)中提取我想要的变量。我有 CSV 文件,其中按年份包含每个变量的位置(位置按年份变化)。例如,2010 年的 HRFS12M1 为 1173-1174,2019 年为 1223-1224(这部分代码未显示但有效,所以我没有包含它)。所以我有两个文件夹和两个单独的目录,一个包含位置,另一个包含 .dat 文件。我首先遍历职位文件并创建包含每年(2010-2019)职位的 dfs。生成位置 dfs 后,我 运行 下面的代码在一个大的合并 df 中获取我想要的变量。现在,当我在 varList 中 select 4 个或更少的变量时,代码可以按预期工作。但是,当我尝试使用更多变量时,df 开始生成不在这些列中的值。有谁知道为什么要这样做?我已经尝试了几个不同的变量来确认这不是位置文件的问题,而是变量数量的问题。

#Loop through list of .dat files (lst2 contains name of files example:2010dec.dat)
for(i in 1:length(lst2)){
  
  #Import the data cps data set
  temp_cps<-readLines(lst2[i])
  
  #Get the positions of the relevant year
   temp_pos<- get(paste("Year", i, sep = "."))
   
   #List of Variables we are looking at (can't use more than 4)
   **varList=c("HRYEAR4","GESTFIPS","HESP1","HRFS12M1")**
  
   #Get positions only for the variables selected
   temp_pos=temp_pos[grep(paste(varList, collapse="|"), temp_pos$Variable),]
   
  #Create the dataframe
  df<-NULL
    for(j in 1:length(varList)){
    df<-cbind(df,substr(temp_cps,temp_pos$Pos1[j],temp_pos$Pos2[j]))
    }
  df<-as.data.frame(df)
  names(df)<-varList
  assign(paste("CPS", i, sep = "."), df)
  
}

 #AutoMate appending each year
for (k in 1:(length(lst2)-1)){
  
  if(k==1){
    CPS1 <- get(paste("CPS", k, sep = "."))
    CPS2 <- get(paste("CPS", k+1, sep = "."))
    #Append to keep only rows of second data set
    merged_data=rbind(CPS1,CPS2)
  }
  else{
    CPS_C <- get(paste("CPS", k+1, sep = "."))
    merged_data=merged_data=rbind(merged_data,CPS_C)
  }
  if(k==length(lst2)-1){
  
    #Clear Console
    rm(list=setdiff(ls(), "merged_data"))
    
  }
}

This is what it looks like before it breaks

This what happens after adding more than 4 variables

我想我明白了。需要 运行 几个额外的变量来确认。但是,如果我的变量列表的位置顺序不对,该程序目前将无法运行。例如,如果“HRYEAR4”是 82-84 而“GESTFIPS”是 93-94,那么如果我在 varList 中将 GETSFIPS 放在 HRYEAR4 之前,程序就会失败。但是,如果 HRYEAR 先出现,则程序将按预期 运行。有谁知道如何替换此行 df<-cbind(df,substr(temp_cps,temp_pos$Pos1[j],temp_pos$Pos2[j]))使其更具活力并且没有这个问题?如果不行,暂时没什么大不了的,我先整理一下,看看以后能不能找到更好的解决办法。感谢任何试图提供帮助的人。