#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