2

我现在正在制作一个 R 包,我必须在返回列表和具有 S3 属性的对象之间进行选择。至于列表,好处是对于初学者来说非常容易使用,因为美元符号使所有元素都易于找到。不好的是,它消除了直接继承(我想返回一个带有一些附加信息的 ts 对象)。

另一种方法是为我的 S3 课程设置美元,如下例所示:

object <- 1
class(object) <- "MyClass"
attr(object,"MyAttribute") <- "This is a secret"

`$.MyClass` <- function(x,name) attr(object,name)

object$MyAttribute

但是,我对此有两个问题:

  • 在哪里设置美元部分匹配功能,以便用户在 rstudio 中将“MyAttribute”视为有效选择?
  • 此外,这是一个很好的做法还是我应该继续使用简单的列表

谢谢

4

1 回答 1

4

我不认为 RStudio 目前允许这种定制。在其他 R 终端中,您可以使用它rcompgen来生成完成,但 IIRC RStudio 会做自己的事情。

也就是说,您的问题似乎是基于错误的二分法:

此外,这是一个很好的做法还是我应该继续使用简单的列表

你不需要选择或者。事实上,具有 S3 类的列表很常见,使用属性存储 S3 信息然后通过$. 只需将您的班级列为清单:

object = structure(
    list(value = 1, MyAttribute = "This is a secret"),
    class = "MyClass"
)

object$MyAttribute
于 2020-05-05T10:45:41.537 回答