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)
当然,如果您扩展现有对象(例如矢量),这可能不起作用,但根据我的经验,这通常是构建对象的更好方法.
可能没有与内部功能相对应的内置功能.在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)