r-使用for循环遍历文件,计算参数并保存为新表



我是一个r -新手,我想使用for循环遍历。txt表。

我有一个列表lidar .txt文件保存在一个文件夹。我想用不同的函数从它们中计算参数,最后我想把每个。txt的参数保存在一个表中。

下面的示例代码显示了它到目前为止的样子,其中我必须分别加载每个.txt文件:

library(VoxR)
plot_xyz <- read.table("C:/Users/plot_a.txt")
plant_vox <- vox(plot_xyz,res=0.1)
plant_vox_filt <- subset(plant_vox, nbpts > 6)
horizontal <-VoxR::project(plant_vox_filt,dim="xy")
vegetation_grid <- nrow(horizontal)
vegetation_area <- vegetation_grid * 0.1^2
total_area <- 25*25
baumhoehe <- (max(plant_vox$data...3.) - min(plant_vox$data...3.))
gap_fraction_voxel <-  1- vegetation_area/total_area
lai_voxel <- - log(gap_fraction_voxel / baumhoehe)

最后,我想创建一个结果表,它应该为每个.txt文件(行)提供这些参数。

vegetation_area total_area baumhoehe gap_fraction_voxel lai_voxel
1          15       60            20         0.7          3.2
2          10       20            30         0.5          3.4
3          30       40            20         0.1          3.5

我如何使用for循环来实现这一点?首先,我需要用。txt文件加载文件夹来实现这样的效果?:

for (i in lidarfiles) {
plant_vox <- vox(plot_xyz,res=0.1)
plant_vox_filt <- subset(plant_vox, nbpts > 6)
....
}

您可以使用list.files获取目录中的所有文本文件,并在函数中包含您想要应用于每个文件的代码。

list_files <- list.files('C:/Users/', pattern = '\.txt', full.names = TRUE)
get_result <- function(file) {
plot_xyz <- read.table(file)
plant_vox <- vox(plot_xyz,res=0.1)
plant_vox_filt <- subset(plant_vox, nbpts > 6)
horizontal <-VoxR::project(plant_vox_filt,dim="xy")
vegetation_grid <- nrow(horizontal)
vegetation_area <- vegetation_grid * 0.1^2
total_area <- 25*25
baumhoehe <- (max(plant_vox$data...3.) - min(plant_vox$data...3.))
gap_fraction_voxel <-  1- vegetation_area/total_area
lai_voxel <- - log(gap_fraction_voxel / baumhoehe)
lai_voxel
}

现在使用lapply对每个文件应用get_result函数

result <- do.call(rbind, lapply(list_files, get_result))

相关内容

  • 没有找到相关文章

最新更新