2011-10-10 43 views
5

Tôi có một đối tượng với một số thuộc tính có giá trị là số nguyên, tức là h =:R: Bắt giá trị thuộc tính như một vector

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

Và tôi muốn nhận được vector kiểu integer(2), v =:

[1] 4 2 

Tôi đã tìm thấy hai cách vụng về để đạt được điều này

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

hoặc:

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

Giải pháp mà tôi đang tìm kiếm chỉ cần làm việc cho trường hợp cơ bản tôi đã mô tả ở trên và cần nhanh nhất có thể.

Trả lời

16

Vâng, nếu bạn có thể sống với những cái tên còn nguyên vẹn:

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

Nếu không (! Mà thực sự là nhanh hơn),

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

Việc thực hiện như sau:

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 
Các vấn đề liên quan