You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R使用itcSegment处理LiDAR数据时循环向列表添加元素仅最后一位有值

核心问题原因

  • 循环逻辑错误:你当前写的for (i in j)中j是单值(总批次数),循环只会执行1次,i直接等于最终的批次号,因此只有列表的对应最后一个位置被赋值,其余位置均未触发写入。
  • 切片边界异常:如果总行数不是10000的整数倍,最后一批切片范围会超出数据集行数,触发下标越界错误。
  • 变量名笔误:plot语句中调用的se对象未定义,你实际运算生成的对象是se1。

修正后代码

library(itcSegment)
library(dplyr)

dataset <- read.table(file = "dataset_test5.txt", header = T, sep = "\t")
# 计算总批次数,用向上取整保证所有数据都被处理
j <- ceiling(nrow(dataset)/10000)
output.list <- vector(mode = "list", length = j) # 提前初始化列表,提升运行效率

k <- 1
for (i in 1:j) { # 遍历1到总批次数,每批次执行一次
  # 切片上限取数据集行数和k+9998的最小值,避免最后一批越界
  end_idx <- min(k+9998, nrow(dataset))
  subdata <- slice(dataset, k:end_idx)
  se1 <- itcLiDAR(subdata$X, subdata$Y, subdata$Z, epsg = 32632, resolution = 1,
                  MinSearchFilSize = 5, MaxSearchFilSize = 11, TRESHSeed = 0.55,
                  TRESHCrown = 0.6, minDIST = 5, maxDIST = 40, HeightThreshold = 10,
                  cw = 1)
  output.list[[i]] <- se1
  plot(se1, axes = T, add = T)
  k <- k + 9999
}

额外优化建议

  • 提前初始化指定长度的列表,比动态追加列表元素的运行效率更高,尤其批次多的时候差异明显
  • 用ceiling计算总批次数,避免因行数不足整数倍导致最后一批数据丢失

内容的提问来源于stack exchange,提问作者Max

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 08:36:04