别人运行的好好的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
- 下一篇: GPU(CUDA)学习日记(十三)---