别人运行的好好的R代码,到我这怎么就冲突了?
生活随笔
收集整理的這篇文章主要介紹了
别人运行的好好的R代码,到我这怎么就冲突了?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
培訓時,同一段代碼,大家都運行的好好的,而你卻出現問題了,一般都是考慮包里的函數沖突了。這時需要一個個去排查到底是哪個函數發生了沖突,有沒有更好的辦法呢?
本文介紹一個包conflicted,可以列出所有沖突的函數,并可以設置優先使用哪個函數來處理沖突。
包的安裝
install.packages("conflicted") # 或 # install.packages("devtools") # devtools::install_github("r-lib/conflicted")加載包后,存在沖突的函數會無法運行
并且提供了兩種解決方法,都在錯誤提示中。(學程序語言,看錯誤提示并且能理解錯誤提示很重要)
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")使用::指定使用哪個包的哪個函數
如下,雖然寫的字母多了些,但清晰明了。如果只用到了filter函數,dyplr包都不用顯示加載。
另外,在Rstuido中,還會有函數自動補全功能,輸入dplyr::后會列出這個包里面所有外部可用函數。
相對應的還有dplyr:::可以調用dplyr中沒有export出的函數。
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或者設定優先級
推薦在加載包的同時,就對可能會發生沖突的函數,設置使用優先級
library(dplyr) # 優先使用dplyr里面的filter函數 conflict_prefer("filter", "dplyr") #> [conflicted] Will prefer dplyr::filter over any other packagefilter(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列出所有存在沖突的函數
如果函數后面存在[],則表示根據默認優先級或認為設定的優先級采用對應包里的函數。
如果函數后面沒有[],如lag函數,使用時就需要按上面2種方式的一種設置具體調用或優先調用哪個包里的lag函數。
conflict_scout() #> 6 conflicts: #> * `filter` : [dplyr] #> * `intersect`: [dplyr] #> * `lag` : dplyr, stats #> * `setdiff` : [dplyr] #> * `setequal` : [dplyr] #> * `union` : [dplyr]往期精品(點擊圖片直達文字對應教程)
機器學習
后臺回復“生信寶典福利第一波”或點擊閱讀原文獲取教程合集
總結
以上是生活随笔為你收集整理的别人运行的好好的R代码,到我这怎么就冲突了?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [原]CUDA中grid、block、t
- 下一篇: Linux 下从命令行打开pdf文件和h