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

如何提取spatstat的mppm模拟hyperframe中的x、y及marks属性值

解决方法

1. 单次模拟结果提取

你生成的sim hyperframe的每一行存储的是对应原始数据集的模拟ppp对象,spatstat的ppp对象可以直接用as.data.frame()转换为数据框,自动导出x、y坐标和所有marks属性:

# 提取单次模拟的所有点数据,可选添加分组标识区分对应原始数据集的序号
sim_single_data <- do.call(rbind, lapply(seq_len(nrow(sim)), function(i) {
  ppp_data <- as.data.frame(sim$Sim1[[i]])
  ppp_data$original_group <- i # 标记对应NMJ1/NMJ2/NMJ3的分组
  return(ppp_data)
}))

运行后得到的sim_single_data就是包含所有模拟点坐标、标记、分组信息的结构化数据框。

2. 批量生成多组独立模拟

要批量生成多次独立模拟,直接给simulate()传入nsim参数即可,函数会自动把每一次模拟结果存为hyperframe的一列:

# 示例:批量生成100次独立模拟,返回的sim_batch是含100列的hyperframe
sim_batch <- simulate(model, nsim = 100)

3. 批量模拟结果提取与存储

3.1 全量合并为单数据框(适配大多数后续分析需求)

可以把所有模拟结果合并为单张数据框,添加模拟批次、分组标识,方便后续批量处理:

# base R版本实现
sim_total <- data.frame()
for (sim_idx in seq_len(ncol(sim_batch))) {
  current_sim <- sim_batch[[sim_idx]]
  for (group_idx in seq_len(length(current_sim))) {
    current_df <- as.data.frame(current_sim[[group_idx]])
    current_df$sim_id <- sim_idx # 标记第几次模拟
    current_df$original_group <- group_idx # 标记对应原始数据集分组
    sim_total <- rbind(sim_total, current_df)
  }
}

如果习惯使用tidyverse语法,可以用更简洁的写法:

library(purrr)
sim_total <- imap_dfr(sim_batch, function(sim_col, sim_name) {
  imap_dfr(sim_col, function(ppp_obj, group_id) {
    df <- as.data.frame(ppp_obj)
    df$sim_id <- sim_name
    df$original_group <- group_id
    return(df)
  })
})

3.2 导出存储

  • 若后续需要用其他软件处理,导出为csv格式:
write.csv(sim_total, "mppm_simulation_results.csv", row.names = FALSE)
  • 若后续仅在R环境中使用,推荐存为RDS格式,可以完整保留数据属性,读写效率更高:
# 存储
saveRDS(sim_total, "mppm_simulation_results.rds")
# 读取
sim_total_read <- readRDS("mppm_simulation_results.rds")

注意事项

如果你的ppp对象带有多列标记、窗口属性等其他信息,as.data.frame()会自动保留多列marks,你也可以手动在转换时添加窗口范围、点密度等衍生指标到数据框中,满足定制化分析需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:00:01