unable to find an inherited method for function ‘select’ for signature ‘"data.frame"’报错及处理

2020-02-13 13:07:02 浏览数 (3)

今天用select函数出现报错,一开始没注意报错信息,因为我选择的列名有些复杂,怕是哪里掉了个空格,就重新换了个方法选列名,还是出错。 报错信息如下

代码语言:javascript复制
> b <- select(a,X.Pathway, Pathway.ID, Genes)
Error in (function (classes, fdef, mtable)  : 
  unable to find an inherited method for function ‘select’ for signature ‘"data.frame"’

简单说,就是不知道为a这个数据框选择什么select函数了。 直接输入select发现在'AnnotationHub'这个包也有select函数。 接近办法:

  1. dplyr::select()

2.detatch AnnotationHub包。

3 安装conflicted包进行优先设置,并且这个包可以给出明确的报错信息和解决方案

代码语言:javascript复制
devtools::install_github("r-lib/conflicted")
library(conflicted)

举例

代码语言:javascript复制
> filter(a,Pathway.ID==ko00010)
代码语言:javascript复制
Error: [conflicted] `filter` found in 2 packages.
Either pick the one you want with `::` 
* dplyr::filter
* stats::filter
Or declare a preference with `conflict_prefer()`
* conflict_prefer("filter", "dplyr")
* conflict_prefer("filter", "stats")

最便捷的还是把常用的包设置优先级 也就是

代码语言:javascript复制
conflict_prefer("filter", "dplyr")

另外可以用conflict_scout()搜索当前安装的有冲突的包

代码语言:javascript复制
> conflict_scout()
94 conflicts:
* `anyDuplicated` : [BiocGenerics]
* `append`        : [BiocGenerics]
* `as.data.frame` : [BiocGenerics]
* `as.list`       : [BiocGenerics]
* `basename`      : [BiocGenerics]
* `boxplot`       : [BiocGenerics]
......

0 人点赞