【发布时间】:2017-10-27 17:41:04
【问题描述】:
我编写的代码非常简单地为一个包创建了一个 S3 类。我寻求创建一个新的 S3 类,以便我可以开发,例如,自定义 print() 方法。
我已经在一个简单的 R 脚本中测试了代码,但是一旦将函数包装到一个包中,功能就会中断并且不再创建 S3 类。我无法提供用于创建包的可重现代码,但下面介绍了我想构建到包中的功能的简化版本。
我的代码无论是在原始代码还是在函数中编写时都能完美运行。
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)) 返回“整数”而不是 c("integer", "newS3class")。
在从其组成功能构建包的过程中,范围界定是否发生了某些事情,从而阻止了它的工作?
【问题讨论】:
-
github上有包吗
-
我没有;也许这个周末