将命名项添加到命名列表 - 保证附加到列表末尾?

SFu*_*n28 15 r list named undefined-behavior insertion

将名称项添加到列表时,是否可以保证该项目将添加到列表的末尾?在实践中似乎是这样,但不确定这是否是一个危险的假设?

test = list()
test[[ "one" ]] = 1
test[[ "two" ]] = 2  # will always appear after "one"?
test[[ "three" ]] = 3  # will always appear after "two"?
Run Code Online (Sandbox Code Playgroud)

Jos*_*ich 25

如果它没有记录(并且它似乎不是),那么我就不会依赖它.您可以通过执行以下操作确保它显示在列表的末尾:

test <- list()
test <- c(test, one=1)
test <- c(test, two=2)
test <- c(test, three=3)
Run Code Online (Sandbox Code Playgroud)

  • 但要非常小心如何将内容添加到列表中.看看`Rgames的结果:tl < - list()``Rgames:tl [[1]] < - list(one = 1)``Rgames:tl [[2]] < - data.frame(two = 2)``Rgames:tl $ 3 < - 3` (2认同)
  • `append(test,list(three = 3))`是另一种选择 (2认同)

Spa*_*man 5

我怀疑如果你深入研究R的C代码那么你会发现它是真的,但正如约书亚所说,它没有记录.您可以向R-dev询问是否记录此类行为的意见.可能已经存在依赖于它的现有代码.

  • Spacedman - 很好的建议,要求R-dev记录下来.谢谢! (3认同)
  • 嗯......我很难看到列表中的新元素(或数据框或者这个问题的向量)如何放在"结束"的任何地方.定义元素的那一刻,它会被分配一个未使用的位置.强调"未使用".这应该是这样的事实,即将例如第三项添加到具有两个元素的列表中的事实将不会将其分配给第47个位置. (3认同)
  • 我同意将一个元素放在长度为12的列表的第7位是不正常的,但为什么结束,而不是开始?当您按名称添加元素时,您不会提供任何位置信息,因此除非另有说明,否则语言可以随意放置.某些语言可能最终通过字符串键的哈希值对其进行排序. (3认同)