繁体   English   中英

R:(中缀)运算符的两个定义之间的冲突:如何指定 package?

[英]R: conflict between two definitions of (infix) operator: how to specify package?

在 R 中,每当两个包定义相同的 function 时,很容易指定哪个 package 与pkg::foo一起使用。 但是,当冲突的 function 是一个中运算符,即使用%%定义时,你怎么办?

例如, ggplot2crayon都定义了%+% 有没有一种方法可以默认使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM