在 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")))
}
我有一个包含许多 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")))
}