Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:如何最好地导入中缀运算符,如%>;%放进我的包裹里?_R_Import_Package_Pipe - Fatal编程技术网

R:如何最好地导入中缀运算符,如%>;%放进我的包裹里?

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

我正在制作一个R-Package,我正在努力导入中缀函数,如
%>%
:=
%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
具有特殊意义的符号,因此无法导入。你说得对,我更改了问题以使其更精确。