Всякий раз, когда у меня есть несколько наборов данных, которые я хочу загрузить и объединить в один набор данных, чтобы я мог анализировать их все одновременно, я делаю что-то вроде
for(i in 1:length(dataset_paths))
{
data_path <- list.files(path = paste0(here(dataset_paths[i]), "results/analysis/"), pattern = ".*\\.degradation_dynamics\\.csv", full.names = TRUE)
t_dt <- fread(data_path)
if(i == 1)
{
dt <- t_dt
}
dt <- rbind(dt, t_dt)
}
rm(t_dt)
dt %>% setkey(frame)
Этот код довольно уродлив.
Есть ли способ сделать этот код более компактным и понятным?
Например,
- Избавление от условия if внутри цикла
- Избавьтесь от
1:length(dataset_paths)выражения - Избавление от определения временной переменной
t_dt?
Решение проблемы
Имейте в виду, что следующий код не тестировался, но с его помощью lapplyвы делаете что-то вроде:
dt <- lapply(dataset_paths, function(x) {
data_path <- list.files(path = here(x, "results", "analysis"), pattern = ".*\\.degradation_dynamics\\.csv", full.names = TRUE)
fread(data_path)
})
dt <- do.call(rbind, dt)
dt %>% setkey(frame)
Комментариев нет:
Отправить комментарий