首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R包中创建S3类

在R包中创建S3类
EN

Stack Overflow用户
提问于 2017-10-27 17:41:04
回答 1查看 447关注 0票数 4

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

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

我的代码在原始编写或在函数中编写时工作得很好。

代码语言:javascript
复制
    x <- 1:10
    class(x)
    class(x) <- append(class(x),"newS3class")

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

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

代码语言:javascript
复制
    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))返回“整数”而不是c("integer", "newS3class")

在从其组成函数构建包的过程中,是否发生了有关范围界定的事情,从而阻止了它的工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-05 00:00:42

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

代码语言:javascript
复制
#' @export summary.objectclass
makeobjectclass <- function(x) {
    class(x) <- c("objectclass", class(x))
    x
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46980693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档