基于我观察到的意外行为的简单问题。我在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<-
调用覆盖的属性。知道如何克服吗?
答案 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"))
这更健壮,因为它适用于list
和data.frame
中的属性,并且只需要一行。