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

R语言ComplexUpset包绘图报无法分配内存错误问题咨询

问题原因及解决方案

报错核心原因

你使用的19个component理论上最多可生成2^19=52万+种交集组合,ComplexUpset默认会计算所有可能的交集,生成的中间统计矩阵实际占用内存远高于报错提示的176Mb,这才是触发内存错误的核心原因,和设备总RAM无关。UpsetR可以正常绘图是因为它默认只计算出现频率最高的部分交集,不会全量计算所有组合。
另外你当前的列转换逻辑存在隐形风险:across(where(is.numeric), as.logical)会将所有数值列(比如ID列)都转换为逻辑型,虽然本次未影响绘图,但后续调整代码时容易出现意料外的错误。

修复后可直接运行的代码

library(tidyverse)
library(ComplexUpset)

# 1. 仅筛选component列,避免误操作其他列
component_cols <- str_subset(colnames(df), "^component\\d+$")
# 2. 仅将component列的0/1转换为逻辑型
df <- df %>% mutate(across(all_of(component_cols), as.logical))

# 3. 绘制带type堆叠条形的Upset图
upset(
  data = df,
  intersect = component_cols,
  name = "protein",
  width_ratio = 0.1,
  # 过滤最小样本数≤10的交集,可根据实际需求调整阈值
  min_size = 10,
  # 最多展示前100个最常见的交集,进一步降低内存占用
  max_intersections = 100,
  # 配置堆叠条形图
  base_annotations = list(
    "Intersection size" = intersection_size(
      mapping = aes(fill = type),
      position = "stack"
    ) + theme(legend.position = "right")
  )
)

参数调整说明

  • 若需要展示更多交集,可适当调大max_intersections数值,或降低min_size的过滤阈值,根据你的数据分布灵活调整即可。
  • 如果调整参数后仍出现内存报错,先将ComplexUpset升级到最新版本,旧版本存在交集计算时的内存泄漏问题。
  • 堆叠条形的颜色、标签、图例位置等样式都可以通过常规ggplot2语法修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:06:07