我是一个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))