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]))使其更具活力并且没有这个问题?如果不行,暂时没什么大不了的,我先整理一下,看看以后能不能找到更好的解决办法。感谢任何试图提供帮助的人。
老实说,我不太确定问题出在哪里,但我过去在 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]))使其更具活力并且没有这个问题?如果不行,暂时没什么大不了的,我先整理一下,看看以后能不能找到更好的解决办法。感谢任何试图提供帮助的人。