首页 > 解决方案 > 将属性添加到名称列表会删除该列表的名称

问题描述

基于我观察到的意外行为的简单问题。我在 R 中有一个命名列表,我在其中添加了attributes<-调用的属性。这将删除列表的名称。为什么以及如何防止这种情况发生?

前任:

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<-调用覆盖的属性。知道如何克服吗?

标签: rattributes

解决方案


我认为这(即,设置一个新属性,或修改现有属性,同时保留现有属性)正是attr()<-为了:

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

$b
[1] "der"

attr(,"attr1")
[1] "my_attr"

推荐阅读