R для цикла, как хранить данные цикла вне цикла для каждой итерации, чтобы избежать падения производительности - PullRequest
0 голосов
/ 20 сентября 2018

я пытаюсь запустить цикл для набора данных 200k.В самом начале цикл работает быстро, а время проходит, производительность цикла снижается из-за увеличения записей в кадрах данных.После 4 часов работы обработано только 50 тыс. Записей, и проблема в том, что я замечаю, что цикл становится все медленнее и медленнее.

Вопрос: я думал, смогу ли я сохранить выходной кадр данных вне цикла?чтобы производительность цикла была лучше.

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])
}

Заранее спасибо!

1 Ответ

0 голосов
/ 20 сентября 2018

Я использую rbindlist вместо rbind.rbindlist намного быстрее, чем rbind.

  1. делает список переменной.

    RESULT_DATA <- list () </p>

  2. ввод данныхиз каждой итерации: idx - это итерация #.

    RESULT_DATA [[idx]] <- as.data.frame (список ([ваши данные]))) </p>

  3. снаружицикла можно связать результат с помощью функции rbindlist.

    RETURN_DATA <- rbindlist (RESULT_DATA) </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...