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

在R中计算基因表达相关矩阵用于Cytoscape时遇报错求解决

问题根源

你报错的核心原因是:原始数据里的Samples列是字符型(存的是A-1、B-2这类样本名),直接转置整个数据框后,这列内容变成了transposed_df的一行,导致数据框混进非数值类型,而cor()函数要求输入必须全为数值,因此触发错误。

修正方案&完整代码

先把样本名设为行名,移除字符型列,再计算相关性,最后导出适配Cytoscape的格式:

# 先安装所需包(未安装时执行以下注释行)
# install.packages("openxlsx")
# install.packages("Hmisc")
# install.packages("tidyr")
# install.packages("dplyr")

library(openxlsx)
library(Hmisc)
library(tidyr)
library(dplyr)

# 你的原始数据
df2 <- structure(list(Samples = c("A-1", "A-2", "A-4", "B-1", "B-2", 
"B-4", "C-1", "C-2", "C-4"), gene1 = c(1.92240792088036, 1.87118633447253, 
1.94158574768122, 0.743982725531221, 0.986224813365175, 0.476215748248648, 
0.731490064245346, 0.596064876825191, 0.571791594329927), gene2 = c(1.38762620120341, 
4.66680898951508, 2.87307760165737, 0.998905293967859, 1.58490494045631, 
1.07311974444822, 4.88661528392309, 3.35118753924545, 6.52812574494532
), gene3 = c(2.75218521855555, 1.96606424938052, 1.26134206679715, 
0.248847419775807, 0.216994140810077, 0.381075639652472, 0.614240099166926, 
0.346259723181132, 0.501984000812794)), class = c("tbl_df", "tbl", 
"data.frame"), row.names = c(NA, -9L))

# 1. 预处理:将样本名设为行名,移除字符型Samples列,保留纯数值基因数据
df_numeric <- df2 %>%
  column_to_rownames(var = "Samples")

# 2. 计算基因间Spearman相关性矩阵
cor_matrix <- cor(df_numeric, method = "spearman")

# 3. 批量计算相关性对应的p值(Hmisc包的rcorr函数可同时输出系数和p值)
cor_results <- rcorr(as.matrix(df_numeric), type = "spearman")
p_matrix <- cor_results$P

# 4. 整理为Cytoscape可用的边列表格式(过滤重复基因对)
edge_list <- cor_matrix %>%
  as.data.frame() %>%
  rownames_to_column("Gene1") %>%
  pivot_longer(-Gene1, names_to = "Gene2", values_to = "Correlation") %>%
  # 合并p值数据
  left_join(
    p_matrix %>%
      as.data.frame() %>%
      rownames_to_column("Gene1") %>%
      pivot_longer(-Gene1, names_to = "Gene2", values_to = "P_value"),
    by = c("Gene1", "Gene2")
  ) %>%
  # 保留非重复的基因对,移除基因自身相关
  filter(Gene1 < Gene2)

# 5. 导出数据
write.xlsx(t(df_numeric), "Transposed_Gene_Data.xlsx")  # 转置后的基因表达数据
write.xlsx(list(Correlation_Matrix = cor_matrix, P_Value_Matrix = p_matrix), "Correlation_Results.xlsx")  # 相关性与p值矩阵
write.xlsx(edge_list, "Cytoscape_Edge_List.xlsx")  # 可直接导入Cytoscape的边列表
关键提示
  • 核心修正点:必须先移除字符型的Samples列,确保输入cor()的是纯数值数据,这是解决报错的关键。
  • Cytoscape适配:导出的Cytoscape_Edge_List.xlsx可直接导入工具,导入时可将Correlation设为边的权重,P_value用于筛选显著相关的基因对。

内容的提问来源于stack exchange,提问作者A.Mokhtari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 21:05:12