R: Получение значений атрибута как вектор - PullRequest
6 голосов
/ 11 октября 2011

У меня есть объект с некоторыми атрибутами, значения которого являются целыми числами, например h =:

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)))

Решение, которое я ищу, просто должно работать для базового случая, который я описал вышеи должен быть как можно быстрее.

1 Ответ

17 голосов
/ 11 октября 2011

Ну, если вы можете жить с именами без изменений:

> 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...