次のコードが属性を設定するために機能する理由は非常に混乱しています。
#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
ます。