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

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

在 R 中,每当两个包定义相同的函数时,很容易指定使用哪个包 pkg::foo。但是,当冲突函数是 infix 运算符时,您如何处理,即使用 %%?

定义

例如,ggplot2crayon都定义了%+%。有没有一种方法我可以默认使用 ggplot2%+%,但在给定的行中,使用 crayon%+%?只是做 crayon::`%+%` 是调用正确的函数(注意反引号),但不再作为中缀运算符工作!?我可以crayon::`%+%`(a, b),它可以,但它不是作为运算符的功能!

代码:

> library(crayon)
> "foo" %+% "bar"
[1] "foobar"
> crayon::`%+%`("foo" ,"bar")
[1] "foobar"
> "foo" crayon::`%+%` "bar"
Error: unexpected symbol in ""foo" crayon"

添加自@MrFlick 的评论:

Unfortunately you can't use namespaces with infix operators in R; the parser just won't recognize that syntax. You need to create an alias as suggested in the answer below. Or create your own version of the operator that does dispatching based on the classes you expect to see.


只是一个想法但是:如何重新定义中缀函数的绑定。假设来自 ggplot2 的那个是您将在代码中最常使用的那个:

library(ggplot2)
`%+c%` <- crayon::`%+%`

这样你就可以正确地为 ggplot2 库命名空间,你只需为 crayon 库使用不同的绑定。