R for 循环,如何在每次迭代的循环外部存储数据帧以避免性能下降



im 尝试为 200k 数据集运行循环。一开始,循环运行速度很快,随着时间的推移,由于数据帧记录的增加,循环性能越来越慢。运行 4 小时后,只处理了 50k 条记录,问题是我注意到循环越来越慢。

问:我在想是否可以将输出数据帧存储在循环之外?以便循环性能可能更好。

for (Row in 1:nrow(J_table)) {
# Getting rules from Arules package
rules <- apriori(trans,parameter=list(supp=0.001,conf=0.1, target = "rules", minlen=2),appearance=list(lhs=c(as.character(J_table$MF_DESCI[Row])),default="rhs"))
# Convert Rules into dataframe
if(length(rules) != 0){
temp_df <- DATAFRAME(rules)
# J_table Left join temp_df  
temp_df<- as.data.frame(cbind(as.character(J_table$SA_TXDATE[Row]),
as.character(J_table$SA_VIPCODE[Row]),
as.character(J_table$SA_DOCNO[Row]),
as.character(J_table$SA_SKU[Row]),
as.character(J_table$MF_DESCI[Row]),
as.character(temp_df$LHS),
as.character(temp_df$RHS),
temp_df$support, 
temp_df$confidence, 
temp_df$lift, 
temp_df$count)) 
# Append dataframe
temp_df <- rbind(temp_df_1, temp_df)
# Copy to temp_df_1 
temp_df_1 <- temp_df
} else {
temp_df_1 <- temp_df_1
}
# distinct temp_Rules_1, make sure unique before next iteration
temp_df_1 <- unique(temp_df_1[1:11])
}

提前感谢!

我使用 rbindlist 而不是 rbind。rbindlist 比 rbind 快得多。

  1. 使列表变量。

    RESULT_DATA <- 列表((

  2. 输入每次迭代的数据:idx 是迭代#。

    RESULT_DATA[[idx]] <- as.data.frame(list([your data]((

  3. 在循环之外,您可以将结果与 rbindlist 函数绑定。

    RETURN_DATA <- rbindlist(RESULT_DATA(

最新更新