別人運行的好好的R代碼,到我這怎么就沖突了?
培訓時,同一段代碼,大家都運行的好好的,而你卻出現(xiàn)問題了,一般都是考慮包里的函數(shù)沖突了。這時需要一個個去排查到底是哪個函數(shù)發(fā)生了沖突,有沒有更好的辦法呢?
本文介紹一個包conflicted,可以列出所有沖突的函數(shù),并可以設置優(yōu)先使用哪個函數(shù)來處理沖突。
包的安裝
install.packages("conflicted")
# 或
# install.packages("devtools")
# devtools::install_github("r-lib/conflicted")
加載包后,存在沖突的函數(shù)會無法運行
并且提供了兩種解決方法,都在錯誤提示中。(學程序語言,看錯誤提示并且能理解錯誤提示很重要)
library(conflicted)
library(dplyr)
filter(mtcars, cyl == 8)
#> Error: [conflicted] `filter` found in 2 packages.
#> Either pick the one you want with `::`
#> * dplyr::filter
#> * stats::filter
#> Or declare a preference with `conflicted_prefer()`
#> * conflict_prefer("filter", "dplyr")
#> * conflict_prefer("filter", "stats")
使用::指定使用哪個包的哪個函數(shù)
如下,雖然寫的字母多了些,但清晰明了。如果只用到了filter函數(shù),dyplr包都不用顯示加載。
另外,在Rstuido中,還會有函數(shù)自動補全功能,輸入dplyr::后會列出這個包里面所有外部可用函數(shù)。
相對應的還有dplyr:::可以調用dplyr中沒有export出的函數(shù)。
dplyr::filter(mtcars, am & cyl == 8)
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> 1 15.8 8 351 264 4.22 3.17 14.5 0 1 5 4
#> 2 15.0 8 301 335 3.54 3.57 14.6 0 1 5 8
或者設定優(yōu)先級
推薦在加載包的同時,就對可能會發(fā)生沖突的函數(shù),設置使用優(yōu)先級
library(dplyr)
# 優(yōu)先使用dplyr里面的filter函數(shù)
conflict_prefer("filter", "dplyr")
#> [conflicted] Will prefer dplyr::filter over any other package
filter(mtcars, am & cyl == 8)
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> 1 15.8 8 351 264 4.22 3.17 14.5 0 1 5 4
#> 2 15.0 8 301 335 3.54 3.57 14.6 0 1 5 8
列出所有存在沖突的函數(shù)
如果函數(shù)后面存在[],則表示根據(jù)默認優(yōu)先級或認為設定的優(yōu)先級采用對應包里的函數(shù)。
如果函數(shù)后面沒有[],如lag函數(shù),使用時就需要按上面2種方式的一種設置具體調用或優(yōu)先調用哪個包里的lag函數(shù)。
conflict_scout()
#> 6 conflicts:
#> * `filter` : [dplyr]
#> * `intersect`: [dplyr]
#> * `lag` : dplyr, stats
#> * `setdiff` : [dplyr]
#> * `setequal` : [dplyr]
#> * `union` : [dplyr]
往期精品(點擊圖片直達文字對應教程)
后臺回復“生信寶典福利第一波”或點擊閱讀原文獲取教程合集

評論
圖片
表情



























