我很困惑为什么以下代码可以设置属性:
#list of character
temp = list()
temp[[1]] = "test"
str(temp)
attr(temp[[1]], "testing") = "try"
attributes(temp[[1]])
返回
$testing
[1] "try"
但是当我尝试在命名列表中设置元素的属性时,比如说使用
#list of character, where list element is named
temp = list()
temp[["2ndtemp"]][[1]] = "test"
str(temp)
attr(temp[["2ndtemp"]][[1]],"testing") = "try"
attributes(temp[["2ndtemp"]][[1]])
这返回NULL
。
然后我发现如果你声明一个递归列表:
#list of a list
temp = list()
temp[["2ndtemp"]] = list()
temp[["2ndtemp"]][[1]] = "test"
str(temp)
attr(temp[["2ndtemp"]][[1]],"testing") = "try"
attributes(temp[["2ndtemp"]][[1]])
这行得通。
进一步探索:
#character vector
temp = "test"
str(temp)
attr(temp,"testing") = "try"
attributes(temp)
也可以,但是如果我有一个包含字符的向量:
temp=vector()
temp[[1]] = "test"
str(temp)
attr(temp[[1]],"testing") = "try"
attributes(temp[[1]])
这返回NULL
。
有人可以向我解释为什么 attr() 函数在这些情况下的工作方式不同吗?
编辑:我对最后一对示例感到非常困惑,因为如果我设置:
temp = "test"
temp2=vector()
temp2[[1]] = "test"
然后查询:
identical(temp,temp2[[1]])
我明白了TRUE
。