2011-10-10 65 views
5

我有一個對象,具有一些屬性,它們的值是整數,即h =R:獲取屬性值作爲載體

attr(,"foo") 
[1] 4 
attr(,"bar") 
[1] 2 

我想integer(2)類型的載體,v =

[1] 4 2 

我已經發現了兩個笨拙的方式來實現這一目標

as.vector(sapply(names(attributes(h)), function(x) attr(h, x))) 

或:

as.integer(paste(attributes(h))) 

我要找的只是該解決方案需要對我上述的基本情況下工作,必須儘可能快。

回答

16

好吧,如果你可以用名稱完整的活:

> h <- structure(42, foo=4, bar=2) 
> unlist(attributes(h)) 
foo bar 
    4 2 

否則(!實際上更快),

> unlist(attributes(h), use.names=FALSE) 
[1] 4 2 

性能如下:

system.time(for(i in 1:1e5) unlist(attributes(h)))     # 0.39 secs 
system.time(for(i in 1:1e5) unlist(attributes(h), use.names=FALSE)) # 0.25 secs 
system.time(for(i in 1:1e5) as.integer(paste(attributes(h))))  # 1.11 secs 
system.time(for(i in 1:1e5) as.vector(sapply(names(attributes(h)), 
      function(x) attr(h, x))))        # 6.17 secs