【问题标题】:How to add an infix function to a package?如何在包中添加中缀函数?
【发布时间】:2019-06-15 19:11:15
【问题描述】:

我想在包中添加一个中缀函数,但%%s 挑战了我。

我找到了this solution,但不幸的是它没有解释应该在哪里添加export("%IN%") 行。我也没有从that 的问题中得到更聪明的答案。由于这些问题是五年前的问题,我决定提出一个新问题。

考虑与第一个链接问题相同的功能。

"%IN%" <- function(x, table) x & match(x, table, nomatch = 0) > 0

我通常会在我的包中添加一个新函数,根据这个粗略的模板编写一个&lt;myfun&gt;_function.R 文件。

#' Title
#'
#' \code{%IN%} does this and that
#' @param x texttext    
#' @param table texttext
#' @return texttext
#' @export
#' @examples
#' 1:5 %IN% 1:3
"%IN%" <- function(x, table) x & match(x, table, nomatch = 0) > 0

因此,我会将一个名为 "`%IN%`_function.R" 的文件保存到我的包目录 XR 文件夹中。

然后在setwd("./X")我运行这些代码行

library(digest)
R.utils::reassignInPackage("digest", "digest", mydigest)
roxygen2::roxygenize()

(我从there 得到mydigest)。

在终端的最后,我使用R CMD build X 创建包。

那么,export("%IN%") 行到底要添加到哪里?

【问题讨论】:

  • 你的文件名无关紧要,虽然我会选择一个不那么奇怪的,比如infix_ops.R,但是你需要添加@export,因为你应该添加你想要的其他功能导出。
  • "要添加的 export("%IN%") 行到底在哪里?"在你的包的 NAMESPACE 文件中。 (与您要导出的所有其他函数相同。)
  • @Moody_Mudskipper 感谢您的线索和示例,我成功了!
  • @Roland Thx,得到它并在自己的答案中进行了总结!

标签: r package documentation infix-notation


【解决方案1】:

根据 cmets,诀窍是按以下顺序进行:

  1. 照常写入函数的*.R文件,任意命名
  2. 运行roxygenize()
  3. 在包文件夹中编辑生成的NAMESPACE文件,添加一行export("%IN%"),非常高兴地手动编辑
  4. 在终端运行R CMD build &lt;package name&gt;
  5. 也许更新版本号
  6. 安装

【讨论】:

  • 如果将@export 指令与roxygen2 一起使用,则无需手动编辑文件:cran.r-project.org/web/packages/roxygen2/vignettes/…
  • @Roland 您能否更具体地说明这与我的问题有何关系?
  • 根据您的回答,您正在使用 roxygen2。如果您不使用它来创建/编辑您的 NAMESPACE 文件,您就没有充分利用它的潜力。我不手动编辑我的 NAMESPACE 文件,仍然导出函数。
猜你喜欢
  • 2022-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多