Добавление атрибутов в список имен стирает названия этого списка - PullRequest
0 голосов
/ 08 февраля 2019

Простой вопрос, основанный на неожиданном поведении, которое я наблюдал.У меня есть именованный список в R, в который я добавляю атрибуты с помощью вызова attributes<-.Это стирает название списка.Почему и как я могу предотвратить это?

ex:

ll <- list(a=1:4, b="der")
str(ll)
List of 2
 $ a: int [1:4] 1 2 3 4
 $ b: chr "der" 

attributes(ll) <- list(attr1 = "my_attr")
 str(ll)
List of 2
 $ : int [1:4] 1 2 3 4
 $ : chr "der"
 - attr(*, "attr1")= chr "my_attr"

Больше нет имен.

Я могу вернуть их, выполнив это:

names(ll) <- c("a", "b")
str(ll)
List of 2
 $ a: int [1:4] 1 2 3 4
 $ b: chr "der"
 - attr(*, "attr1")= chr "my_attr"

Однако я бы не хотел записывать имена до и повторно применять их после.У меня такое чувство, что оригинальные имена - это атрибут, который перезаписывается вызовом attributes<-.Есть идеи, как с этим справиться?

Ответы [ 3 ]

0 голосов
/ 13 февраля 2019

Хороший способ добавить attributes к существующему объекту:строки.

0 голосов
/ 13 февраля 2019

Я думаю, что это (т. Е. Установка одного нового атрибута или изменение существующего, оставляя существующие атрибуты на месте) именно то, для чего attr()<- предназначен:

> attr(ll,"attr1") <- "my_attr"
> ll
$a
[1] 1 2 3 4

$b
[1] "der"

attr(,"attr1")
[1] "my_attr"
0 голосов
/ 08 февраля 2019

Из документации для attributes:

При назначении атрибутов сначала удаляются все атрибуты, затем задается любой атрибут dim, а затем остальные атрибуты в указанном порядке: это гарантирует, что значение dimАтрибут всегда предшествует атрибуту dimnames.

Я думаю, что предварительный захват имен действительно может быть единственным способом, если вы должны использовать attributes.Но я бы подумал об изменении атрибута с более целевой функцией, если это возможно.Что вы пытаетесь установить?

Вы можете, например, рассмотреть возможность добавления comment.Смотри документацию здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...