修改scMetabolism中的sc.metabolism.Seurat函数

最近发现2022年出了一个可以做单细胞代谢定量的R包scMetabolism,想着用一下试试。

scMetabolism文章链接:Spatiotemporal Immune Landscape of Colorectal Cancer Liver Metastasis at Single-Cell Level - PubMed (nih.gov)

GitHub链接:

wu-yc/scMetabolism: Quantifying metabolism activity at the single-cell resolution (github.com)

我先根据GitHub的链接,安装依赖包

install.packages(c("devtools", "data.table", "wesanderson", "Seurat", "devtools", "AUCell", "GSEABase", "GSVA", "ggplot2","rsvd"))
devtools::install_github("YosefLab/VISION@v2.1.0") #Please note that the version would be v2.1.0
devtools::install_github("wu-yc/scMetabolism")

安装的过程中出现了问题说是GSVA,VISION@v2.1.0安装不上

师兄说VISION@v2.1.0安装不上是需要安装一个动态库,先在服务器上安装动态库再安装VISION@v2.1.0。

devtools::install_github("YosefLab/VISION@v2.1.0") #Please note that the version would be v2.1.0 安装成功
devtools::install_github("wu-yc/scMetabolism") #安装成功!

已经全部安装好了,进入正题!

根据GitHub上的教程走代码如下:

library(scMetabolism)
library(ggplot2)
library(rsvd)

载入我自己的数据根据教程跑代码 

luad_data<-readRDS("/home/data/sdb/single_cell_data/processed_single_cell/GSE131907_luad.rds")

luad_data@active.assay #SCT

luad_data<-sc.metabolism.Seurat(obj = luad_data, method = "AUCell", imputation = F, 
                                ncores = 2, metabolism.type = "KEGG")

 

然后就报错了报错内容如下

然后我去看了一下sc.metabolism.Seurath函数的解释,也没看出来什么,所以去GitHub上面看了一下这个函数的源码:scMetabolism/R/compute_metabolism_Seurat.R at main · wu-yc/scMetabolism (github.com)

之后我发现,因为seurat 更新到V5之后,它的数据存放发生了改变,所以出现了错误

这个函数里面用到的还是seurat V4的示例数据,所以只需要修改一下就好了。

不了解seurat V4数据结构的可以看一下这个链接:

Seurat对象内部结构简介 - 谢大飞的文章 - 知乎 https://zhuanlan.zhihu.com/p/665483959

也就是说其实需要的数据是单细胞的稀疏矩阵,seurat V5将原始counts矩阵放在了

countexp<-obj@assays$RNA@layers$counts 但是这个是没有rownames和colnames的

需要添加行名和列名所以可以将源代码中的:

#需要修改的源代码
countexp<-obj@assays$RNA@counts

#修改之后的源代码,修改方式1

countexp<-obj@assays$RNA@layers$counts
row.names(countexp)<-row.names(obj@assays$RNA$counts)
colnames(countexp)<-colnames(obj@assays$RNA$counts)  

#修改方式2
countexp<-obj@assays$RNA$counts

上面两种方式都是一样的效果。

那么重点来了,我们已经知道了要具体修改哪句源码,以及修改成什么样子,但是我们要让我们的R包也修改了呀,要怎么办呢?

修改GitHub源码的流程一般是:克隆仓库到本地,在 Rstudio 中新建项目 选择 R 包,然后选择你克隆下来的文件夹;修改你需要改的文件;最后点击右上角 Build 里面的 install

先来说第一步:克隆仓库到本地,参考链接如下

GIt——怎样克隆远程仓库到本地(敲详细)_git克隆到本地-CSDN博客

首先你打开你要克隆的远程仓库。

找到远程仓库的路径。在弹出的页面会发现一个Code,点击Code,会出现一个网址,复制一下这个网址,下面克隆的时候用得着。

然后打开服务器,在自己的文件夹下面创建一个文件,我创建的文件名是scMetabolism

然后再服务器linux的命令窗口输入以下命令,就是我们刚刚复制过来的网址,克隆到本地。

git clone https://github.com/wu-yc/scMetabolism.git

然后就发现刚刚创建的文件夹里面已经有了我们克隆过来的文件。

然后我们打开 Rstudio 中新建项目 选择 R 包,然后选择你克隆下来的文件夹;修改你需要改的文件;最后点击右上角 Build 里面的 install

创建一个新的项目,选择existing ,也就是我们服务器上存在的文件。

然后我们就选择刚刚创建的scMetabolism文件夹就创建了项目

找到我们需要修改的函数

打开红框里面的函数这个函数就是我们要修改的,然后对要修改的代码进行修改,修改好了点击保存。

下面是我修改之后的。

然后点击Build 里面的 install--install package。这样我们就安装了修改之后的scMetabolism

可以用命令scMetabolism::sc.metabolism.Seurat看一下是否真的修改了源码。

我这里是修改好了的。然后就可以重新跑命令啦

luad_data<-sc.metabolism.Seurat(obj = luad_data, method = "AUCell", imputation = F, 
                                ncores = 2, metabolism.type = "KEGG")

不报错啦,成功运行不过出现了warning不用管!

成功计算出来了每个细胞的代谢打分诶!可以进行下一步了吼吼。

  • 28
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是代码实现: ```python import pandas as pd import numpy as np import math import matplotlib.pyplot as plt # 读取数据 data = pd.read_csv('input.csv') # 灰色系统建模预测PMV值 def gm11(x0): x1 = np.cumsum(x0) z1 = (x1[: -1] + x1[1:]) / 2.0 z1 = z1.reshape((len(z1), 1)) B = np.append(-z1, np.ones_like(z1), axis=1) Y = x0[1:].reshape((len(x0) - 1, 1)) # 计算参数a和b [[a], [b]] = np.dot(np.dot(np.linalg.inv(np.dot(B.T, B)), B.T), Y) # 计算残差序列 delta = np.abs(Y - np.dot(B, [[a], [b]])) # 计算相对误差 C = np.mean(delta / Y) # 预测值 F = np.dot(np.array([x0[0]]), np.array([[1, -a]]) / b) # 计算后验差比 P = 1.0 - delta / Y return F, a, b, C, P # 灰狼优化算法 def GWO(objf, lb, ub, dim, SearchAgents_no, Max_iter): # 初始化灰狼位置 Alpha_pos = np.zeros(dim) Beta_pos = np.zeros(dim) Delta_pos = np.zeros(dim) Alpha_score = float("inf") Beta_score = float("inf") Delta_score = float("inf") Positions = np.zeros((SearchAgents_no, dim)) for i in range(dim): Positions[:, i] = np.random.uniform(0, 1, SearchAgents_no) * (ub[i] - lb[i]) + lb[i] Convergence_curve = np.zeros(Max_iter) # 循环迭代 for l in range(0, Max_iter): for i in range(0, SearchAgents_no): # 计算适应度值 fitness = objf(Positions[i, :]) if fitness < Alpha_score: Alpha_score = fitness Alpha_pos = Positions[i, :] if fitness > Alpha_score and fitness < Beta_score: Beta_score = fitness Beta_pos = Positions[i, :] if fitness > Alpha_score and fitness > Beta_score and fitness < Delta_score: Delta_score = fitness Delta_pos = Positions[i, :] a = 2 - l * ((2) / Max_iter) # 计算参数a # 循环迭代每个灰狼 for i in range(0, SearchAgents_no): # 循环迭代每个维度 for j in range(0, dim): # 计算A、C、D、X1、X2、X3 r1 = np.random.rand() r2 = np.random.rand() A1 = 2 * a * r1 - a C1 = 2 * r2 D_alpha = abs(C1 * Alpha_pos[j] - Positions[i, j]) X1 = Alpha_pos[j] - A1 * D_alpha r1 = np.random.rand() r2 = np.random.rand() A2 = 2 * a * r1 - a C2 = 2 * r2 D_beta = abs(C2 * Beta_pos[j] - Positions[i, j]) X2 = Beta_pos[j] - A2 * D_beta r1 = np.random.rand() r2 = np.random.rand() A3 = 2 * a * r1 - a C3 = 2 * r2 D_delta = abs(C3 * Delta_pos[j] - Positions[i, j]) X3 = Delta_pos[j] - A3 * D_delta # 计算新的灰狼位置 Positions[i, j] = (X1 + X2 + X3) / 3 Convergence_curve[l] = Alpha_score return Alpha_pos, Alpha_score, Convergence_curve # 计算PMV值 def calc_pmv(temp_max, temp_min, num_people): # 固定参数 area = 25 orientation = 4 solar_radiation = 8.7 # 计算平均温度 temp_mean = (temp_max + temp_min) / 2 # 计算人体代谢率 metabolism_rate = 58.15 * num_people # 计算相对湿度 relative_humidity = 50 # 计算空气速度 air_speed = 0.1 # 计算热辐射温度 radiative_temperature = 0.95 * temp_mean # 计算空气温度 air_temperature = (temp_max + temp_min) / 2 # 计算热传导系数 h_clothing = 0.8 # 计算热阻 r_clothing = 0.155 * metabolism_rate # 计算平均温度的饱和水蒸汽压力 es = 6.11 * math.exp(5417.7530 * ((1 / 273.16) - (1 / (temp_mean + 273.16)))) # 计算平均温度下的水蒸汽分压力 e = (relative_humidity / 100) * es # 计算湿度比 h = 0.62198 * (e / (101325 - e)) # 计算PMV值 pmv = 0.303 * math.exp(-0.036 * metabolism_rate) + 0.028 * metabolism_rate + 0.1 * (metabolism_rate - 58) - \ 0.386 * (temp_mean - 22) - 0.006 * (temp_max - temp_min) + 0.284 * metabolism_rate * ( 0.001 * (5867 - 0.67 * temp_mean) + 0.00062 * metabolism_rate + 0.000006 * ( 34 - relative_humidity) + 0.0007 * ( 70.8 - air_speed)) + 0.0014 * ( metabolism_rate - 58) * (temp_mean - 22) + 0.202 * ( metabolism_rate - 58) - 0.000017 * metabolism_rate * ( 39.6 - temp_mean) ** 2 - 0.0015 * ( 0.45 * (metabolism_rate - 58) - 0.1) * (5.67 * 10 ** (-8)) * ( (radiative_temperature + 273) ** 4 - (air_temperature + 273) ** 4) - 3.05 * 10 ** (-3) * ( metabolism_rate - 58) * ( 1.7 * 0.00001 * metabolism_rate + 0.0014 * ( 0.45 * (metabolism_rate - 58) - 0.1) * ( (radiative_temperature + 273) ** 4 - (air_temperature + 273) ** 4) - 1.5 * ( air_temperature - temp_mean)) return pmv # 定义灰狼优化算法需要的参数 SearchAgents_no = 10 Max_iter = 100 lb = [10, 10, 1] ub = [30, 20, 10] dim = 3 # 灰狼优化算法求解PMV值 def objf(x): pmv = calc_pmv(x[0], x[1], x[2]) return pmv Alpha_pos, Alpha_score, Convergence_curve = GWO(objf, lb, ub, dim, SearchAgents_no, Max_iter) print("最优解:", Alpha_pos) print("最优解对应的PMV值:", Alpha_score) # 绘制收敛曲线图 plt.plot(np.arange(Max_iter), Convergence_curve) plt.xlabel("Iteration") plt.ylabel("PMV value") plt.show() ``` 在运行以上代码前,需要准备好数据文件 `input.csv`,格式如下: ``` 最高温度,最低温度,室内人数 20,10,5 25,15,10 30,20,15 35,25,20 ``` 运行结果将输出最优解和最优解对应的PMV值,并且会绘制出收敛曲线图。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值