在名称列表中添加属性会删除该列表的名称

时间:2019-02-08 19:19:26

标签: r attributes

基于我观察到的意外行为的简单问题。我在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<-调用覆盖的属性。知道如何克服吗?

3 个答案:

答案 0 :(得分:2)

我认为这(即设置一个新属性或修改一个现有属性,同时保留现有属性)正是this._D.getData()的目的

attr()<-

答案 1 :(得分:1)

摘自attributes的文档:

  

分配属性首先删除所有属性,然后设置任何dim   属性,然后按给定的顺序其余属性:this   确保设置暗淡属性始终在dimnames之前   属性。

我认为,如果必须使用attributes,事先捕获名称确实是唯一的方法。但是,如果可能的话,我会考虑使用更具针对性的功能来更改属性。您要设定什么?

例如,您可以考虑添加comment。请参阅文档here

答案 2 :(得分:0)

attributes添加到现有对象的一种好方法是:

attributes(ll) <- append(attributes(ll), list(attr1 = "my_attr"))

这更健壮,因为它适用于listdata.frame中的属性,并且只需要一行。