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

如何在R中基于多向量组合生成Jaccard指数矩阵?

用简洁方法计算字符串向量的Jaccard指数矩阵并生成热图

第一步:统一管理样本向量

先把分散的单个向量整理成列表,这是批量处理的基础:

sample_sets <- list(
  set1 = c("A1", "B1", "C1", "D1"),
  set2 = c("A2", "B1", "C1", "D2"),
  set3 = c("A3", "B3", "C2", "D1"),
  set4 = c("A4", "B4", "C4", "D4")
)

第二步:生成Jaccard指数矩阵

利用outer()函数可以直接对所有向量组合计算Jaccard指数,无需手动循环。调整你的Jaccard函数适配列表索引,再用Vectorize()实现批量处理:

# 定义Jaccard指数计算函数
jaccard <- function(a, b){
  shared_len <- length(intersect(sample_sets[[a]], sample_sets[[b]]))
  union_len <- length(sample_sets[[a]]) + length(sample_sets[[b]]) - shared_len
  return(shared_len / union_len)
}

# 生成4×4的Jaccard指数矩阵
jaccard_matrix <- outer(
  names(sample_sets), 
  names(sample_sets), 
  Vectorize(jaccard)
)

# 为矩阵设置行列名,方便识别样本
rownames(jaccard_matrix) <- names(sample_sets)
colnames(jaccard_matrix) <- names(sample_sets)

outer()会自动遍历所有向量组合,Vectorize()让你的Jaccard函数能处理多组输入参数,完全替代重复代码或循环。

第三步:生成热图

推荐两种常用的热图生成方式:

方法1:用pheatmap(简洁高效)

# 未安装包先执行:install.packages("pheatmap")
library(pheatmap)

pheatmap(jaccard_matrix, 
         main = "Jaccard指数热图",
         display_numbers = TRUE, # 显示单元格内的Jaccard数值
         number_color = "black")

方法2:用ggplot2(高度自定义)

# 未安装包先执行:install.packages(c("ggplot2", "reshape2"))
library(ggplot2)
library(reshape2)

# 将矩阵转换为ggplot支持的长格式数据框
jaccard_df <- melt(jaccard_matrix)

ggplot(jaccard_df, aes(x = Var1, y = Var2, fill = value)) +
  geom_tile(color = "white") +
  geom_text(aes(label = round(value, 2)), color = "black") +
  scale_fill_gradient(low = "#f7fbff", high = "#08306b") +
  labs(title = "Jaccard指数热图", x = "", y = "") +
  theme_minimal()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 05:12:34