如果R代码一定要访问github链接导致运行失败

2023-10-23 19:11:22 浏览数 (3)

最近帮学徒测试了immunedeconv包,首先它在github上面,所以本身就很难安装:

代码语言:javascript复制
# deconvolution_methods
# https://github.com/omnideconv/immunedeconv
# remotes::install_github("omnideconv/immunedeconv")

library(immunedeconv)
library(tidyverse)
library(tidymodels) 

然后我在运行immunedeconv包里面的mcp_counter时候,发现它需要访问一个在github的文本文件:

代码语言:javascript复制
res.mcp <- deconvolute(expr, 'mcp_counter')

那肯定是会报错:

代码语言:javascript复制
#   genes = read.table(curl:::curl("https://raw.githubusercontent.com/ebecht/MCPcounter/master/Signatures/genes.txt")
# Could not resolve host: raw.githubusercontent.com

然后chatGPT给我了两个解决方案,通过BioinfoArk提供的中国区chatGPT查询

两个解决方案

第一个方案要在R中设置代理,你可以使用以下代码:

代码语言:javascript复制
# 设置HTTP代理
Sys.setenv(http_proxy = "http://your_proxy_server:your_proxy_port")
Sys.setenv(https_proxy = "http://your_proxy_server:your_proxy_port")

# 设置FTP代理(如果需要)
Sys.setenv(ftp_proxy = "http://your_proxy_server:your_proxy_port") 

在上述代码中,将 your_proxy_server 替换为你的代理服务器的地址,将 your_proxy_port 替换为代理服务器的端口号。请注意,这些设置是临时的,只在当前R会话中有效。如果你希望在每次启动R时都自动应用代理设置,可以将上述代码添加到你的R配置文件中。R配置文件的位置取决于你的操作系统和R版本,通常是 .Rprofile.Renviron 文件。另外,如果你的代理服务器需要身份验证,你可能需要提供用户名和密码。你可以使用以下代码设置代理服务器的用户名和密码:

代码语言:javascript复制
Sys.setenv(http_proxy_user = "your_username")
Sys.setenv(http_proxy_password = "your_password") 

your_username 替换为你的代理服务器的用户名,将 your_password 替换为你的代理服务器的密码。

这个方案我肯定是没办法选择,我根本就没有代理服务器。。。

方案2:下载后读取文件

在代码里面可以看到他们的github链接,然后下载两个txt文件即可:

代码语言:javascript复制
library(MCPcounter)
probesets = read.table( 'MCPcounter-Signatures-probesets.txt', 
                        sep = "t", stringsAsFactors = FALSE, colClasses = "character") 

genes = read.table('MCPcounter-Signatures-genes.txt', 
                   sep = "t", stringsAsFactors = FALSE, header = TRUE, 
                   colClasses = "character", check.names = FALSE)  

相当于绕过了 MCPcounter 包,仅仅是使用了它里面的appendSignatures函数 :

代码语言:javascript复制
markers.names = unique(features[, "Cell population"])
features = split(features[, "HUGO symbols"], features[, 
                                                      "Cell population"])
missing.populations = setdiff(markers.names, names(features))
features = features[intersect(markers.names, names(features))]
# apply(xp[intersect(row.names(xp), x), , drop = F], 2,  mean, na.rm = T)
res.mcp = t(appendSignatures(expr, features))

#   genes = read.table(curl:::curl("https://raw.githubusercontent.com/ebecht/MCPcounter/master/Signatures/genes.txt")
# Could not resolve host: raw.githubusercontent.com
## connection refused|20230209
knitr::kable(head(res.mcp)[,1:4], digits=2, "rst")
pheatmap::pheatmap(res.mcp)

而且我拆开看appendSignatures函数的时候,好家伙,它就是一个简简单单取平均值。。。。

代码语言:javascript复制
 apply(xp[intersect(row.names(xp), x), , drop = F], 
 2,  mean, na.rm = T)

这个算法有待商榷。。。。

0 人点赞