Объединить файлы с начальным шаблоном в R - PullRequest
1 голос
/ 30 сентября 2019

У меня есть каталог со многими las-файлами. Это выглядит как на картинке ниже, но с сотнями файлов.

enter image description here

Я хотел бы объединить все файлы, начинающиеся с одного и того же имени (досимвол «_»)

Мне удалось разработать скрипт, который объединяет все файлы с одинаковым шаблоном

masterlist =list.files("//directory/",pattern="^name1")
listfiles <- paste("//directory/",masterlist, sep="")

#concatenate files into one file
con_files = c(listfiles)

lasread <- readLAS(con_files)
lasmerge <- rbind(lasread)
writeLAS(lasmerge, "//write/directory/name1.las")

Однако в этом скрипте я жестко закодировал «name1». Я хотел бы, чтобы это было динамическим на основе имен файлов.

Так что это должен быть какой-то цикл, основанный на списке, но я не знаю, как создать цикл с динамическим шаблоном.

Надеюсь, кто-нибудь может помочь.

Спасибо

Ответы [ 2 ]

2 голосов
/ 30 сентября 2019

Просто создайте список шаблонов и запустите код для каждого шаблона. Вот так

path <- "."
write_path <- "."
patterns <- list.files(path, pattern = ".*\\.las")
patterns <- strsplit(patterns, "_")
patterns <- unique(sapply(patterns, function(x) x[1]))

for(p in patterns) {
    masterlist <- list.files(path, pattern = paste0("^", p))
    listfiles <- paste(path, masterlist, sep = "")

    #concatenate files into one file
    con_files = c(listfiles)

    lasread <- readLAS(con_files)
    lasmerge <- rbind(lasread)
    writeLAS(lasmerge, file.path(write_path, paste0(p, ".las")))
}
0 голосов
/ 30 сентября 2019

Предполагая, что общий код работает для одного типа «имени», мы можем разделить masterlist на основе сходного шаблона в именах и применить одну и ту же функцию ко всем группам

masterlist <- list.files("//directory/",pattern="\\.las$")
name_pat <- sub("[_ ].*", "", masterlist)

Map(function(x, y) {
    lasread <- readLAS(x)
    lasmerge <- rbind(lasread)
    writeLAS(lasmerge, paste0("//write/directory/", y, ".las"))
}, split(masterlist, name_pat), unique(name_pat))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...