在 R 中合并具有起始模式的文件

Merge files with starting pattern in R

我有一个包含许多 las 文件的目录。 看起来像下面的图片,但是有数百个文件。

我想合并所有以相同名称开头的文件(直到“_”字符)

我已经成功地开发了一个脚本,它将所有文件合并为相同的模式

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"。 我希望这是基于文件名的动态。

所以它应该是某种基于列表的循环,但我不知道如何创建具有动态模式的循环。

希望大家帮帮忙。

谢谢

假设共享的代码适用于一种类型的"name",我们可以根据相似的名称模式拆分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))

只需创建一个模式列表和 运行 每个模式的代码。 像这样

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