为什么R的关联数组被称为list而不是map/dictionary

Mov*_*ast 8 r data-structures

我最近开始学习R语言.我来自Java/Python背景.我发现令人惊讶的一件事是,associative arrayR被叫,List而不是像MapDictionary.

我认为像Map和Dictionary这样的名称更好地传达了数据结构是关联数组而不是列表的想法.能告诉我这背后的原因是什么?

42-*_*42- 13

S的历史比Java或Python更长.该术语源自LisP最早的高级语言之一.

此外,您可以使用命名原子向量创建某些人可能称为关联数组的内容:

 vec <- c(a=1,b=2,c=3)
 vec["b"]
 #b 
 #2 
Run Code Online (Sandbox Code Playgroud)

有两种向量:"递归"和"原子".列表是第一类.如果为元素分配了键,则可以通过"名称"对两者进行索引.但是,R中的术语"名称"严格指的是存在于具有对象值的环境中的符号.见?as.name.在R中,"名称"或"符号"是代码中未引用的语言对象,而字符值用于通过键分配或提取数据对象的值.

  • 你正在躲避我的观点(并说明为什么这个问题被关闭).S在两种语言中的任何一种被引用为具有更好的术语之前就已存在.使用具有汽车和cdr功能的S/R列表并不困难.`LL < - list(1,2,3); car < - function(x){x [[1]]}; cdr < - function(x){x [-1]}` (2认同)

Spa*_*man 5

"地图"是世界的图表.要在地图上查找内容,您必须以二维方式进行扫描.这是O(n ^ 2)."字典"是按字母顺序排列的单词.要在字典中查找单词,您必须进行二进制搜索.这是O(log n)性能.

因此,对我而言,这两个词都没有准确地描述结构,也没有关联数组的表现......

从数学上讲,关联数组只是一个离散范围的函数.所以它们应该被称为函数.双方括号只是一种语法上的烦恼.我们为什么不能这样做:

z = list()
z("foo") = c(1,2,3)
print(z("foo")) # prints 1 2 3
print(z("bar")) # errors
Run Code Online (Sandbox Code Playgroud)
  • 因为R不是那样的.

  • ......因为数学家们还没有足够的语言来混淆我们. (5认同)
  • "map"或"mapping"有时用作"function"的同义词 (3认同)