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

如何将R中job::job()的环境输出转为可用变量?

问题

处理超过4TB的激光雷达(lidar)数据时,使用LidR包对LAScatalog执行高度归一化函数,并通过job::job()将任务作为后台运行。代码如下:

las_dir <- "path/to/.las/files/"

las_cat <- readLAScatalog(las_dir, filter = "-drop_overlap -drop_class 6 7 9 13 14 15 16 17 18 0 -keep_random_fraction 0.1")

# 创建基于k近邻逆距离加权的高度归一化函数
norm_height_knnidw <- function(chunk) {
  las <- readLAS(chunk)
  if (lidR::is.empty(las)) return(NULL)
  
  las <- normalize_height(las, algorithm = knnidw())
}

# 设置LAScatalog的参数
opt_chunk_size(las_cat) <- 250
opt_chunk_buffer(las_cat) <- 5
opt_output_files(las_cat) <- paste0(tempdir(), "{XLEFT}_normed", overwrite = TRUE)
opt_stop_early(las_cat) <- FALSE
opt <- list(automerge = TRUE)

# 后台运行任务
job::job(las_normed = {
  options(mc.cores = 16) # 24核高性能机器
  # 运行高度归一化
  catalog_apply(las_cat, norm_height_knnidw, .options = opt)
})

任务运行完成(耗时5天9小时),但输出的las_normed是环境对象,无法进行后续LAScatalog操作:

> class(las_normed)
[1] "environment"

> str(las_normed)
<environment: 0x00000293a7b4c538>

# 尝试设置后续处理的输出路径时报错
> opt_output_files(las_normed) <- paste0(las_output, "{*}_dtm_pitfree", overwrite = TRUE)
Error in ctg@chunk_options : 
  no applicable method for `@` applied to an object of class "environment"

需要将该环境对象转换为可用的LAScatalog变量,或明确job初始设置时遗漏的步骤。

解决方案
  • 提取环境中的实际结果
    job::job()返回的环境对象存储了代码块内生成的所有变量,先查看环境内的变量名,再提取目标结果:
# 查看环境内的变量列表
ls(las_normed)

# 提取实际的LAScatalog结果(替换为ls输出的对应变量名)
actual_las_normed <- las_normed$las_normed
  • 修正job调用语法(避免后续歧义)
    当前的job调用语法存在参数赋值歧义,建议在代码块内部显式将结果赋值给变量:
# 正确的后台任务调用方式
job_env <- job::job({
  options(mc.cores = 16)
  # 显式将归一化结果赋值给变量
  las_normed <- catalog_apply(las_cat, norm_height_knnidw, .options = opt)
})

# 从环境中提取LAScatalog对象
actual_las_normed <- job_env$las_normed
  • 验证结果有效性
    提取后检查变量类型,确认是可用的LAScatalog:
class(actual_las_normed)
# 预期输出:"LAScatalog" "R6"

之后即可对actual_las_normed执行后续的LAScatalog操作。

内容的提问来源于stack exchange,提问作者Dr-JH-o'clock

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 21:57:43