命名空间中的 S3 方法未导出

2023-12-20

我正在开发一个R使用 devtools::document() 进行打包以创建 NAMESPACE 文件。其中几个函数是用于汇总、预测、绘图、打印的 S3 方法,其中通用函数位于base or stats。 我按照 Hadley 的建议使用 @export,这会导致命名空间中出现正确的 S3method 条目,并且该包通过了所有检查 -as-cran。然而,这些函数没有在命名空间中导出,因此找不到调用 print.myclass (我知道这是避免混乱命名空间的期望行为)。但是,通过 Mypackage::print.myclass 调用该函数也会导致错误,该函数不是从中导出的对象Mypackage.

问题:这是正确的行为吗?或者还需要其他步骤来导出该函数吗?我尝试添加 @method print Myclass 和 @export 但没有成功。使用 R 3.4.2 与devtoolsMAC OS X 10.12.6 下的 1.13.3

谢谢!梅尔利斯

编辑:更新为添加/导出方法和导出功能的代码

简单的例子 - 在 RStudio 中使用函数构建一个骨架包:

#' test for export of S3 methods
#'
#' @title "print hello world for any object"
#' @param x object
#' @param digits optional number specifying the number of digits to display
#' @param ... other parameters to be passed to \code{print.default}
#' @export print.hello
#' @export
print.hello = function (x, digits = max(3, getOption("digits") - 3), ...)
{
  cat("\n Hello World \n")
  invisible()
}

命名空间现在有

# Generated by roxygen2: do not edit by hand

S3method(print,hello)
export(print.hello)

使用不带参数的 @export 会导出该方法,而 @export print.hello 会导出该函数,但不会将该方法添加到命名空间(这将导致包检查出错)。两者兼具就可以导出方法和函数。


首先,为了正式定义 S3 方法并正确导出它,而无需手动更改命名空间文件(假设您使用的是 roxygen),

#' test for export of S3 methods
#'
#' @title "print hello world for any object"
#' @param x object
#' @param digits optional number specifying the number of digits to display
#' @param ... other parameters to be passed to \code{print.default}
#'
#' @rdname print
#' @export print
print <- function(x, ...){
  UseMethod("print")
}

#' @rdname print
#' @export print.hello
#' @export
print.hello <- function (x, digits = max(3, getOption("digits") - 3), ...)
{
  cat("\n Hello World \n")
  invisible()
}

这或多或少为您提供了预期的行为testPackage::print.hello。这里更重要的是了解 S3 方法到底是做什么用的。用于R中的方法调度以及后面的后缀.应该始终代表您应该作为函数第一个参数放入的对象类。也就是说,在这种情况下,如果你想使用print.hello通过一次调用print,你必须放一类hello,在成功构建并加载测试包后尝试下面的示例

a = 1
print(a) # method dispatched as print.default because class of a is numeric
# 1  
class(a) <- 'hello'
print(a) # method dispatched as print.hello
# Hello World 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

命名空间中的 S3 方法未导出 的相关文章

  • 在 R 的 stargazer 表中设置注释格式

    我在用stargazer包来生成 回归输出 表 一切都在奇迹般地进行 直到我开始编辑笔记 First 换行很难 但是 Bryansuggests https stackoverflow com questions 21720264 star
  • R中的引用调用(使用函数修改对象)

    我刚刚接触 R 很惊讶地发现函数不会修改对象 至少看起来这是默认的 例如 我编写了一个函数 只是为了在表格中的一个标签上粘贴一个星号 它在函数内部工作 但表本身没有改变 我主要来自Ruby 那么 在 R 中使用函数更改对象的正常 可接受的方
  • 将整数“20160119”转换为“日”“年”“月”的不同列

    如何将一列整数转换为日期 DATE PRCP 1 19490101 25 2 19490102 5 3 19490118 18 4 19490119 386 5 19490202 38 到这样的表 days month years PRCP
  • R 下与 Julia 的密切联系

    In my R代码 我使用MixedModels Julia包裹 我整合Julia in R使用JuliaCall包裹 我使用非常大的数据集 1 GB 4x10 6观察 和建模步骤 mixed models 分配了大量 RAM 80 GB
  • R 如何按行值进行分组、拆分或子集

    这是上一个问题的延续R 如何按行值分组 分裂 https stackoverflow com questions 64602607 r how to group by row value split 输入数据帧的变化是 id str c x
  • 使用示例代码继续在 ggplot2 中遇到错误“loop_apply”未从当前命名空间(plyr)解析”

    我今天一直遇到这个错误 我已经从 github 下载了 plyr 但它仍然不起作用 安装 plyr 后 我重新启动了 R studio 甚至我的电脑 看来问题可能是由于 R 解析对外部 DLL 的引用的方式发生了变化 正如线程中途提到的he
  • 将日期刻度添加到 R 中的 ggplot

    我试图在此图中的 x 轴上添加刻度以显示一年中的所有月份 我的代码如下 library ggplot2 library scales p lt ggplot df test aes time reading p geom point alp
  • 在 Microsoft Windows 上安装 RQuantLib

    我需要安装R包RQuantLib在 Microsoft Windows 计算机上 这个包没有二进制文件 所以我下载了 tar 源 我打开它 它包含 QuantLib C 库 所以我需要编译这个包 我不想安装 Visual Studio 我使
  • Quanteda 包,朴素贝叶斯:如何预测不同特征的测试数据?

    I used quanteda textmodel NB创建一个模型 将文本分类为两个类别之一 我将模型拟合到去年夏天的训练数据集上 现在 我今年夏天尝试使用它对我们在工作中收到的新文本进行分类 我尝试这样做并收到以下错误 Error in
  • 按元素名称组合/合并列表

    我有两个列表 其元素的名称部分重叠 我需要将其逐个元素合并 组合成一个列表 gt lst1 lt list integers c 1 7 letters letters 1 5 words c two strings gt lst2 lt
  • 在R中重新排序字母数字年龄组

    假设这就是 R 给我的 df1 data frame grp c lt 2 2 5 21 26 27 32 6 10 val rep 0 5 grp val 1 lt 2 0 2 2 5 0 3 21 26 0 4 27 32 0 5 6
  • 调试 Littler/Rscripts

    我该如何调试Rscripts从命令行运行 我目前正在使用getopt包来传递命令行选项 但当出现错误时 我很难 看看到底出了什么问题 交互式调试R 因为脚本需要命令行选项 有人有示例代码并愿意分享吗 您可以使用 args 将命令行参数传递到
  • 如何将 Python 标识符转换为数字?

    参考 有没有更快的方法将数字转换为名称 https stackoverflow com questions 11052808 在上面提到的问题中 找到了将数字转换为名称的解决方案 这个问题问的恰恰相反 如何将名称转换回数字 到目前为止 这就
  • 通过 read.big.matrix 读取 R 中的大数据

    我正在使用 r 读取尺寸为 3131875 5 的数据read big matrix 我的数据既有字符列又有数字列 包括日期变量 我应该使用的命令是 as1 lt read big matrix C Documents and Settin
  • 在动画 ggplot2 中的轴标签上包含图像

    我创建了一个动画条形图 显示玩家的进球数 虚构 请参阅示例的复制数据 df lt data frame Player rep c Aguero Salah Aubameyang Kane 6 Team rep c ManCity Liver
  • 如何使用 roxygen 记录数据集?

    是否可以在 roxygen 进程中将 R 文件包含在我的包的数据目录中 我已将几个 R 文件放入数据目录中 当它们使用 data 获取数据时 它们会读取原始数据文件并执行一些转换 Roxygen 可以在 R 文件中的任何位置使用 换句话说
  • 带有 R 传单的自定义图例 - 同一图例中的圆形和正方形

    我想创建一个传单地图 在同一个传单图图例中既有圆形又有正方形 到目前为止 我已经使用了上一篇文章中的建议 并在我闪亮的 UI 代码中添加了以下代码 tags style type text css html body width 100 h
  • 如何在R中生成多个矩阵

    我在 R 中得到了两个值列表 daily max car List 1 21 21 22 22 22 22 21 daily 0 8 List 2 16 17 17 17 18 17 17 尝试在 R Studio 中编写一个 For 循环
  • 尽管参数与文档匹配,Svyby 返回错误

    我已经使用调查包定义了一个调查对象 一切正常 并向其中添加了两列 如下所示 anes svy lt update the update fn adds columns to a survey object anes svy object t
  • 字符串常量之前应有非限定 ID

    我目前正在编写一个 C 应用程序 它与 math h 结合实现了振荡器 我拥有的代码应该可以很好地用于该应用程序 尝试编译目标文件 但是我遇到编译器错误 很可能与语法 等有关 我认为这与命名空间有关 错误 终端输出 User Name Ma

随机推荐