Есть ли способ показать ход слияния

#r

#r

Вопрос:

Я запускаю следующий код в R, чтобы объединить два фрейма данных для создания нового. Есть два столбца, в которых значения должны совпадать. Фрейм данных расстояния большой (70 м строк), и я объединяю данные на основе двух столбцов в фрейме x_parents данных. Я знаю об этой progress_bar функции, но я думаю, что поскольку то, чего я пытаюсь достичь, не является циклом, это не сработает. Поскольку фрейм distance данных настолько велик, выполнение функции занимает несколько минут, но я хотел бы иметь возможность показывать ход выполнения скрипта.

 crosses <- merge(x_parents, distance, 
     by.x = c("Female_Parent", "Male_Parent"), 
     by.y = c("FEMALE_PARENT", "MALE_PARENT"), all.x = FALSE, all.y = FALSE)
 

Комментарии:

1. Хотя существуют различные пакеты (например, progress и progressr ), оба они требуют конкретного вмешательства, которое merge не позволит (как вы сказали). Многие dplyr глаголы действительно показывают прогресс; хотя я не пробовал объединять такие большие данные, возможно, использование dplyr::inner_join(...) даст вам некоторое представление о прогрессе.

2. Боковое примечание: нетрудно представить, что соединение занимает много памяти. Напомним (или «Знаете ли вы»), что простые data.frame объекты в R будут дублироваться в памяти, и даже несмотря на то, что вы выполняете внутреннее соединение (одно из самых «добрых» способов использования памяти wrt из разновидностей соединений), оно все равно копирует совсем немного. С такими большими данными, я думаю, вы могли бы рассмотреть более экономную обработку данных с использованием памяти, такую как SQL (не в R) или data.table (ссылочная семантика, максимально избегает копирования при записи).

3. Не ответ, а эквивалентные инструменты из dplyr ( full_join ) или data.table могут дать вам лучшую производительность, чем базовый R