R:如何最好地导入中缀运算符,如%>;%放进我的包裹里?
我正在制作一个R-Package,我正在努力导入中缀函数,如R:如何最好地导入中缀运算符,如%>;%放进我的包裹里?,r,import,package,pipe,R,Import,Package,Pipe,我正在制作一个R-Package,我正在努力导入中缀函数,如%>%,:=或%dopar% 在DESCRIPTION-文件中,我使用了Imports:(例如Imports:doParallel)概念。在代码中,我使用了package::function()(例如dplyr::mutate())概念,这似乎是可行的(R CMD check很高兴),但我如何导入中缀函数呢 @importFrom(例如#“@importFrom magrittr%%>%%)roxygen方式似乎适用于%%,:=和%do
%>%
,:=
或%dopar%
在DESCRIPTION
-文件中,我使用了Imports:
(例如Imports:doParallel
)概念。在代码中,我使用了package::function()
(例如dplyr::mutate()
)概念,这似乎是可行的(R CMD check
很高兴),但我如何导入中缀函数呢
@importFrom
(例如#“@importFrom magrittr%%>%%
)roxygen方式似乎适用于%%
,:=
和%dopar%
。但是,由于它被复制到namseparace
-文件中,因此将@importFrom
添加到一个函数中可以解决整个包的问题,这似乎有点“黑”
将这些函数导入我的软件包的最佳实践是什么?我不确定在这种情况下是否有单一的最佳实践。 使用
@importFrom
更新名称空间
文件确实是一个包范围的指令,
但我从来没有遇到过有问题的包裹,
或者避免它的理由。
如果愿意,可以使用相同的@importFrom
指令对多个函数进行注释,
指示哪些函数使用哪些导入,
不会引起任何冲突;
这完全取决于你,
一个就够了。
使用@import
可能会令人不快,
但我认为这真的取决于你进口的是哪个包装
根据您的问题,我推断您明确使用了:
(我个人认为这是良好的实践),
然后您甚至不需要更改名称空间
。
在大多数情况下,这样就可以了,
虽然可能有非常特殊的情况,通常需要单独考虑。
至少在我的经验中,这些特殊情况通常与S4泛型有关
以base::rowSums
函数为例:
它不是base
中的通用函数,
但是如果附加了矩阵
包,
rowSums
被“转换”为S4泛型,
但基本包中不包含泛型。
这种情况的原因超出了本答案的范围
(有关更多信息,请参见非泛型的方法),
但这意味着如果包使用符号base::rowSums
,
它不会从矩阵
分派给方法。
支持这两种情况的唯一方法
(即当用户未使用矩阵时,以及当用户使用矩阵时)
将使用rowSums
而不使用base::
现在,关于中缀运算符,
如果要使用:
,
您需要类似于base::`%in%`(“a”,c(“a”,“b”))
,
这本质上意味着将其用作函数并失去中缀语法,
你可能不想要的东西
所以除非你有非常具体的理由去避免其中一个,
只要用你喜欢的符号。
我个人会尽可能地坚持:
,
但决不会将其用于中缀运算符。点不是运算符,它是对
magrittr
具有特殊意义的符号,因此无法导入。你说得对,我更改了问题以使其更精确。