我编写了非常简单地为包创建 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")
.
在从其组成功能构建包的过程中,范围界定是否发生了某些事情,这阻止了它的工作?