unable to find an inherited method for function 『select』 for signature 『"data.frame"』報錯及處理辦法

  • 2020 年 2 月 13 日
  • 筆記

今天用select函數出現報錯,一開始沒注意報錯資訊,因為我選擇的列名有些複雜,怕是哪裡掉了個空格,就重新換了個方法選列名,還是出錯。 報錯資訊如下

> 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包進行優先設置,並且這個包可以給出明確的報錯資訊和解決方案

devtools::install_github("r-lib/conflicted")  library(conflicted)

舉例

> filter(a,Pathway.ID==ko00010)
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")

最便捷的還是把常用的包設置優先順序 也就是

conflict_prefer("filter", "dplyr")

另外可以用conflict_scout()搜索當前安裝的有衝突的包

> conflict_scout()  94 conflicts:  * `anyDuplicated` : [BiocGenerics]  * `append`        : [BiocGenerics]  * `as.data.frame` : [BiocGenerics]  * `as.list`       : [BiocGenerics]  * `basename`      : [BiocGenerics]  * `boxplot`       : [BiocGenerics]  ......

Tags: