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 快得多。
使列表变量。
RESULT_DATA <- 列表((
输入每次迭代的数据:idx 是迭代#。
RESULT_DATA[[idx]] <- as.data.frame(list([your data]((
在循环之外,您可以将结果与 rbindlist 函数绑定。
RETURN_DATA <- rbindlist(RESULT_DATA(