在R包中创建S3类

时间:2017-10-27 17:41:04

标签: r r-package r-s3

我编写的代码非常简单地为包创建了一个S3类。我寻求创建一个新的S3类,以便我可以开发,例如,自定义print()方法。

我已经在一个简单的R脚本中测试了代码,但只要函数被包装到一个包中,功能就会中断并且不再创建S3类。我无法为包的创建提供可重现的代码,但下面将介绍我想在包中构建的函数的简化版本。

我的代码在raw或函数内编写时效果很好。

    x <- 1:10
    class(x)
    class(x) <- append(class(x),"newS3class")

class(x)将返回c("integer", "newS3class")

同样,现在,声明一个执行相同操作的函数。这也很好。实际上,我的函数foo()首先对输入执行一些操作,然后使用新类返回输出。

    foo <- function(y) {
      y <- y + 3
      class(y) <- append(class(y), "newS3class")
      y
    }

class(1:5)返回"integer"class(foo(1:5))返回c("integer", "newS3class")。这是预期的。

但是,当我开发一个包,例如mypkg,然后运行mypkg::foo()时,功能就会被破坏。即,(mypkg::foo(1:5))返回&#34;整数&#34;而不是c("integer", "newS3class")

在从组成函数构建软件包的过程中,是否存在关于范围界定的事情,这阻碍了它的运行?

1 个答案:

答案 0 :(得分:0)

我在这里犯的错误是我没有正确导出课程。为了解决这个问题,我在使用roxygen包构建我的文档和NAMESPACE之前添加了以下代码块,包括导出行。

#' @export summary.objectclass
makeobjectclass <- function(x) {
    class(x) <- c("objectclass", class(x))
    x
}