我正在使用矩阵库来处理稀疏矩阵。偶尔,我需要运行一个使用生物导体包的函数,它依赖于S4Vectors库。不幸的是,矩阵中的"colSums“函数与S4Vectors中的"colSums”函数冲突。因此,当我运行这个函数时,它破坏了我的"colSums“函数,这真的很烦人。
对于这个问题,我知道有两种常见的解决方案: 1)在加载矩阵库之前加载生物导体包--然而,我很少使用这个函数,所以我倾向于只在需要的时候加载生物导体包。2)而不是调用"colSums",而是调用"Matrix::colSums“--然而,这是非常不方便的,我需要更改我的整个代码库。
理想情况下,我只是加载生物导体包,运行我的功能,然后通过卸载生物导体包或重新加载矩阵包来清理我的环境。然而,我在做这些方面有困难。首先,是否有可能重新加载矩阵::colSums(以便替换S4Vectors::colSums)?其次,当我试图卸载S4Vectors时,R会抱怨,因为很多其他包都依赖它。
因此,除了S4Vectors为什么有一个与R中最常用的稀疏矩阵包冲突的函数这一显而易见的问题之外,我想知道这个问题的最佳解决方案是什么?简单地重新装载一个包不可能那么困难,对吧?
发布于 2017-06-16 12:50:25
正如您已经知道的,正确的方法是编写Matrix::colSums。
一个不需要重写代码的简单解决方案是添加一行
colSums <- Matrix::colSums在你的密码里。然后,这个colSums属于您的全局环境,因此在任何其他库之前都可以找到。
编辑
我找到了更好的解决办法。我将用plyr和dplyr演示,因为它们都有arrange函数,并且会引起冲突。
Example1。dplyr稍后加载,因此获胜。
library(plyr)
library(dplyr)
environment(arrange)
# <environment: namespace:dplyr>例2. plyr获胜
# unload libraries
unloadNamespace("plyr")
unloadNamespace("dplyr")
library(dplyr)
library(plyr)
environment(arrange)关键是搜索顺序,您可以通过search函数找到它。下面,您可以看到plyr先于dplyr。
search()
# [1] ".GlobalEnv" "package:plyr" "package:dplyr" "tools:rstudio"
# [5] "package:stats" "package:graphics" "package:grDevices" "package:utils"
# [9] "package:datasets" "package:methods" "Autoloads" "package:base" 示例3.您可以在搜索列表中指定要加载库的位置;pos参数。
unloadNamespace("plyr")
unloadNamespace("dplyr")
library(plyr)
library(dplyr, pos=length(search()))
environment(arrange)
# <environment: namespace:plyr>
search()
# [1] ".GlobalEnv" "package:plyr" "tools:rstudio" "package:stats"
# [5] "package:graphics" "package:grDevices" "package:utils" "package:datasets"
# [9] "package:methods" "Autoloads" "package:dplyr" "package:base" 总之,您可以加载Bioconductor库,并提供大量的pos。也就是说,你说Bioconductor依赖于S4Vector,而S4Vector是导致冲突的原因。不幸的是,您不能直接控制依赖包的位置,因为require语句在Bioconductor包中。
解决方法是,首先使用S4Vector选项加载pos,然后加载Bioconductor。
library(S4Vector, pos=10) # replace 10 by an appropriate large number
library(Bioconductor) 然后,S4Vector将按搜索顺序放在Matrix之后。
另一种解决办法
如果您想重新加载Matrix,那么您也可以这样做:
library(dplyr)
library(plyr)
environment(arrange)
# <environment: namespace:plyr>
unloadNamespace("dplyr")
library(dplyr)
environment(arrange)
# <environment: namespace:dplyr> 发布于 2017-06-16 12:35:10
示例:
library(lubridate)卢布多日弹出一条消息说:下面的对象被隐藏在‘package:base’:date中,但是您仍然可以到达原始的date函数。
base::date()所以你不需要看装货顺序。只需具体说明你在哪种功能中使用。
https://stackoverflow.com/questions/44578920
复制相似问题