R语言setwd()报错:你踩过的坑我都替你再踩了一遍
整理setwd()无法改变工作目录的几种常见原因和调试方法,从路径校验、分隔符、权限到中文目录,附带一段可以直接抄的排错代码。
支持通配符SSL证书、多域名证书、IP证书。适配ACME接口, 支持Zerossl、Let's Encrypt和Google等渠道。登录已有账号
2026-07-24 13:15:40 R语言 KEGG clusterProfiler 生物信息学
最近在搞 KEGG 富集分析,连着被两个问题卡了好一会儿——网络连接超时,还有基因 ID 映射丢数据。错误信息长这样:
错误于(function (con = stdin(), n = -1L, ok = TRUE, warn = TRUE, encoding = "unknown", :
cannot read from connection
此外: 警告信息:
1: In bitr(sig_genes, fromType = "SYMBOL", toType = "ENTREZID", OrgDb = org.Mm.eg.db) :
5.12% of input gene IDs are fail to map.
2: In (function (con = stdin(), n = -1L, ok = TRUE, warn = TRUE, encoding = "unknown", :
URL 'https://rest.kegg.jp/link/mmu/pathway': Timeout of 60 seconds was reached
眼熟吧,线上跑起来问题就出来了。下面是我自己排查的路线,中间有些地方其实容易踩坑,带一下。
先说网络超时。
报错很直白,60 秒没读回来数据。先确认机器能正常上网,浏览器打开 KEGG 页面没问题,那基本就是 R 的默认超时太短或者当时 KEGG 的 REST 接口响应慢。最直接的补丁是调大超时时间,一句 options(timeout = 120) 丢在代码最前面,能解决大部分临时波动。我一开始也以为这就完了,后来发现如果网络本身不稳定,或者跑在一个没配好代理的服务器上,加大超时也只是多等一会然后照样挂。这种时候不如直接用本地缓存,提前把 KEGG 的注释数据下载下来存着,后续 enrichKEGG 可以从本地读。怎么存?clusterProfiler 有对应的函数,搜一下就能找到,流程不复杂。还不行就得查防火墙和代理了,找网络管理员放开对 rest.kegg.jp 的访问,或者在 R 里设好 httr::set_config 代理,这个看自己环境改。
再说基因 ID 映射失败。bitr 输出警告说 5.12% 的输入 SYMBOL 没转成 ENTREZID。这个比例不高,但扔掉之前最好搞清楚是不是格式问题。很多人会绕进去的一点是以为大小写无所谓,或者物种没对上,拿着人的基因符号去查小鼠的数据库。检查下你的基因列表是不是确实全都是小鼠的标准基因符号,有些带特殊后缀、版本号或者旧名的会映射不上。然后确认 org.Mm.eg.db 是不是最新的,Bioconductor 更新方式:
if (!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install("org.Mm.eg.db")
更新完重跑一下,有时能多补上几个。剩下实在映射不上的,如果基因数不多,查一下 NCBI Gene 手动补一下再合并进去;如果量不大且对下游影响有限,就过滤掉。我那次看丢的不到 6%,且都不是我关心的核心通路上的,就直接滤掉往下走了。
最后整合到一起跑通的代码片段放上来,里面包含了超时设置、映射检查和直接过滤未映射基因的逻辑。
注释里写的比较细,差不多就是我当时改出来能正常出结果的版本。
library(clusterProfiler)
library(org.Mm.eg.db)
library(dplyr)
options(timeout = 120)
sig_genes <- c("GeneA", "GeneB", "GeneC") # 模拟数据
gene.df <- bitr(sig_genes,
fromType = "SYMBOL",
toType = "ENTREZID",
OrgDb = org.Mm.eg.db)
if (nrow(gene.df) < length(sig_genes)) {
warning("Some gene IDs failed to map.")
mapped_genes <- gene.df$ENTREZID
} else {
mapped_genes <- gene.df$ENTREZID
}
kegg <- enrichKEGG(
gene = mapped_genes,
organism = 'mmu',
keyType = 'kegg',
pvalueCutoff = 0.05,
pAdjustMethod = "BH"
)
if (!is.null(kegg) && nrow(kegg) > 0) {
print(kegg)
} else {
message("No significant KEGG pathways found.")
}
跑通之后,KEGG 结果就能正常拿到了。这两个问题本质上都跟网络和注释版本强相关,以后如果再碰到,第一时间检查的就是这两样。
整理setwd()无法改变工作目录的几种常见原因和调试方法,从路径校验、分隔符、权限到中文目录,附带一段可以直接抄的排错代码。
在R语言中安装Bioconductor包时,你是否常遇到各种报错?本文深入剖析了BiocManager安装包可能出现的镜像源配置、RDS文件损坏、依赖缺失、网络故障及可视化乱码等常见问题。我们提供了详细的解决方案,包括重置官方镜像、删除临时文件、排查依赖等,助你高效解决问题,确保Bioconductor包顺利安装,提升你的生物数据分析效率。
Bioconductor包安装失败是不是让你抓狂?别担心,你不是一个人!本文就是你的救星。我们手把手教你如何诊断并解决包括ShortRead在内的各种Bioconductor包的安装困境。从最有效的强制重装策略,到细致的包状态检查、系统性更新,甚至切换最佳镜像源,每一步都为你精心设计,确保你的生物信息学工具库能顺利运行。