3

在 R 中,只要两个包定义了相同的函数,就很容易指定使用哪个包pkg::foo。但是当冲突的函数是中运算符时,你怎么办,即使用定义%%

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

代码:

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

1 回答 1

2

从@MrFlick 的评论中添加:

不幸的是,你不能在 R 中使用带有中缀运算符的命名空间;解析器只是无法识别该语法。您需要按照以下答案中的建议创建别名。或者创建您自己的操作员版本,根据您希望看到的类进行调度。


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

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

这样,您就可以正确地对库进行命名空间,ggplot2并且您只需为该库使用不同的绑定crayon

于 2021-08-13T15:49:00.057 回答