每当R语言版本更新,Bioconductor的版本随之更替的时候,总会有一些神奇的报错会出现,比如说下面这种。
Error: package or namespace load failed for ‘GenomicRanges’:
在从名字空间‘XVector’中出口方法时发现了不是S4通用的函数‘parallelSlotNames’
如果读中文读不懂,我们可以把它翻译成英文。
package or namespace load failed for ‘GenomicRanges’:
Function found when exporting methods from the namespace ‘XVector’ which is not S4 generic: ‘parallelSlotNames’
这里有一个关键词,namespace,通常会被翻译成命名空间,在这里指的是一个R包所包括的所有函数。换句话说,XVector
里的parallelSlotNames
函数出现了问题。
到底是什么样的问题呢?通过检索3.11 + parallelSlotNames, 我找到了Bioconductor 3.11版本的一项更新日志,在我们强调的部分,里面写着它们将parallelSlotNames()
重命名为vertical_slot_name
.
那么问题来了,为什么我知道是这个版本问题呢?一方面是我之前遇到类似的报错,另一方面是我在调试的时候看到了如下的信息
载入需要的程辑包:GenomeInfoDb
Error: package or namespace load failed for ‘GenomicRanges’:
在从名字空间‘XVector’中出口方法时发现了不是S4通用的函数‘parallelSlotNames’
In addition: Warning messages:
1: 程辑包‘S4Vectors’是用R版本4.0.0 来建造的
2: 程辑包‘IRanges’是用R版本4.0.0 来建造的
这里写道S4Vectors
和IRanges
是由R4.0.0构建的,而我的R版本才只是3.6.3,R 3.6.3对应Biocondcutor 3.10, R 4.0.0对应Bioconductor 3.11,根据这个警告信息,我找到了问题的源头,也就是一些R包的版本不对。
因此,我手动删除了S4Vectors和IRanges,并用BiocManager::install(c("S4Vectors", "IRanges"), version="3.10")
的方式重装这个R包,最后问题解决了。这里的version="3.10"
可以保证自己的版本一定是指定的3.11