欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

别人运行的好好的R代码,到我这怎么就冲突了?

发布时间:2025/3/15 编程问答 60 豆豆
生活随笔 收集整理的这篇文章主要介绍了 别人运行的好好的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代码,到我这怎么就冲突了?的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。