R-如何重新加载功能(或更改包优先级)

R-如何重新加载功能(或更改包优先级),r,matrix,sparse-matrix,s4,bioconductor,R,Matrix,Sparse Matrix,S4,Bioconductor,我正在使用矩阵库处理稀疏矩阵。有时,我需要运行一个使用Bioconductor包的函数,该包依赖于S4Vectors库。不幸的是,矩阵中的“colSums”函数与S4Vectors中的“colSums”函数冲突。因此,当我运行这个函数时,它破坏了我的“colSums”函数,这真的很烦人 我知道这个问题有两种常见的解决方案: 1) 在加载矩阵库之前加载Bioconductor包-但是,我很少使用此函数,因此我更愿意只在需要时加载Bioconductor包。 2) 不要调用“colSums”,而是调

我正在使用矩阵库处理稀疏矩阵。有时,我需要运行一个使用Bioconductor包的函数,该包依赖于S4Vectors库。不幸的是,矩阵中的“colSums”函数与S4Vectors中的“colSums”函数冲突。因此,当我运行这个函数时,它破坏了我的“colSums”函数,这真的很烦人

我知道这个问题有两种常见的解决方案: 1) 在加载矩阵库之前加载Bioconductor包-但是,我很少使用此函数,因此我更愿意只在需要时加载Bioconductor包。 2) 不要调用“colSums”,而是调用“Matrix::colSums”-然而,这非常不方便,我需要更改我的整个代码库

理想情况下,我只需加载Bioconductor包,运行我的函数,然后通过卸载Bioconductor包或重新加载Matrix包来清理我的环境。然而,我在做这些方面有困难。首先,是否可以重新加载矩阵::colSums(以替换S4Vectors::colSums)?其次,当我尝试卸载S4Vectors时,R会抱怨,因为许多其他包都依赖于它

所以除了一个显而易见的问题,为什么S4Vectors的函数与R中最常用的稀疏矩阵包冲突,我想知道这个问题的最佳解决方案是什么?简单地重新加载一个包可能不会那么困难,对吗?

示例:

library(lubridate)
卢布德里德日期超过了日期。弹出一条消息说:以下对象被“package:base”屏蔽:date 但是您仍然可以使用原始的日期函数

base::date()

所以你不用看装载顺序。只需具体说明您使用的函数

正如您所知,正确的方法是编写
Matrix::colSums

一个不需要重写代码的简单解决方案是添加一行代码

colSums <- Matrix::colSums
例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。您可以指定要在搜索列表中加载库的位置<代码>位置参数

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" 
然后,
S4Vector
将按搜索顺序放置在
矩阵
之后

另一个解决方案 如果要重新加载矩阵,还可以执行以下操作:

library(dplyr)
library(plyr)
environment(arrange)
# <environment: namespace:plyr>

unloadNamespace("dplyr")
library(dplyr)
environment(arrange)
# <environment: namespace:dplyr> 
库(dplyr)
图书馆(plyr)
环境(安排)
# 
unloadNamespace(“dplyr”)
图书馆(dplyr)
环境(安排)
#  

谢谢!这是一个完美的解决方案,我非常感谢您的帮助。更新:Kota Mori推荐了最好的解决方案,使用“unloadNamespace”函数在重新加载矩阵包之前先卸载它。
library(S4Vector, pos=10)  # replace 10 by an appropriate large number
library(Bioconductor)  
library(dplyr)
library(plyr)
environment(arrange)
# <environment: namespace:plyr>

unloadNamespace("dplyr")
library(dplyr)
environment(arrange)
# <environment: namespace:dplyr>