是否有更简单的方法来访问R中的类的属性,我可以使用点表示法吗?

Roc*_*nce 26 attributes r object

我在R中创建了一个包含多个属性的对象.我怎样才能轻松访问它们?

我可以:

attr(x, attributeName)
Run Code Online (Sandbox Code Playgroud)

要么:

attributes(x)$attributeName
Run Code Online (Sandbox Code Playgroud)

但它们都不是很方便.

有更快的方法(比如C++或Java中的点)吗?

Rei*_*son 17

attributes()返回一个命名列表.我打电话给它并存储它们,然后通过名字访问.没有必要反复呼叫,attr()或者attributes()如果你不需要.

x <- 1:10
attr(x, "foo") <- "a"
attr(x, "bar") <- "b"
(features <- attributes(x))
Run Code Online (Sandbox Code Playgroud)

这使:

R> (features <- attributes(x))
$foo
[1] "a"

$bar
[1] "b"
Run Code Online (Sandbox Code Playgroud)

然后以通常的方式访问

R> features["foo"]
$foo
[1] "a"

R> features$foo
[1] "a"
Run Code Online (Sandbox Code Playgroud)


had*_*ley 12

不要使用对象的属性,使用列表:

myobj <- structure(list(a = 1, b = 2), class = "myclass")
print.myclass <- function(x, ...) cat("A: ", x$a, " B: ", x$b, "\n", sep = "")
myobj
Run Code Online (Sandbox Code Playgroud)

当然,如果您扩展现有对象(例如矢量),这可能不起作用,但根据我的经验,这通常是构建对象的更好方法.

  • 问题是如何访问属性.你的答案是"不要那样做",这不是对所提问题的回答.还有其他人正在寻找同一问题的答案. (9认同)
  • S4类有一个类似的简单工作流程吗? (3认同)

koh*_*ske 9

可能没有与内部功能相对应的内置功能.在C++中,你可以像这样定义它:

> `%.%` <- function(o, a) attr(o, as.character(substitute(a)))
> x <- 1
> attr(x, "orz") <- 2
> x%.%orz
[1] 2
Run Code Online (Sandbox Code Playgroud)

  • 根据属性/字段/槽的访问方式选择类系统可能不是做出决策的最佳方式. (3认同)