[英]R: conflict between two definitions of (infix) operator: how to specify package?
在 R 中,每当两个包定义相同的 function 时,很容易指定哪个 package 与pkg::foo
一起使用。 但是,当冲突的 function 是一个中缀运算符,即使用%%
定义时,你怎么办?
例如, ggplot2
和crayon
都定义了%+%
。 有没有一种方法可以默认使用ggplot2
的%+%
,但在给定的行中,使用crayon
的%+%
? 只是做crayon::`%+%`
正在调用正确的 function(注意反引号),但不再用作中缀运算符了? 我可以做crayon::`%+%`(a, b)
,它可以工作,但它不是 function 作为操作员!
代码:
> library(crayon)
> "foo" %+% "bar"
[1] "foobar"
> crayon::`%+%`("foo" ,"bar")
[1] "foobar"
> "foo" crayon::`%+%` "bar"
Error: unexpected symbol in ""foo" crayon"
从@MrFlick 的评论中添加:
不幸的是,您不能在 R 中使用带有中缀运算符的命名空间; 解析器只是无法识别该语法。 您需要按照以下答案中的建议创建别名。 或者创建您自己的操作员版本,根据您希望看到的类进行调度。
只是一个想法,但是:如何重新定义中缀函数的绑定。 假设ggplot2
中的那个是您将在代码中最常使用的那个:
library(ggplot2)
`%+c%` <- crayon::`%+%`
这样,您就可以正确命名ggplot2
库,并且您只需为crayon
使用不同的绑定。
library(conflicted)
conflict_prefer("%+%", "ggplot2")
# Code using ggplot2 definition
conflict_prefer("%+%", "crayon")
# "given line" using crayon definition
conflict_prefer("%+%", "ggplot2")
# Code using ggplot2 definition
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.