如果它们通常以索引 1 开头,那么 R 列表的索引 0 中是什么?

What is in index 0 of an R list if they usually start with index 1?

来自 Python 我试图更深入地了解 R 的习惯和设计原则。所以这不是作业问题。

list() 以索引 1 而不是 0 开头似乎很常见。

> a = list(1,2,3)
> a[[1]]
[1] 1

但是索引 0 是什么?

> a[[0]]
Error in a[[0]] : 
  attempt to select less than one element in get1index <real>
> a[0]
list()

我知道 [][[]] 有区别。我不完全理解其中的区别或背后的设计原则。

R 是否有等效的 PEP 来阅读设计决策?

编辑:“重复”问题不适合我的问题,也没有可接受的答案。恕我直言,我的问题的答案要好得多。

没有索引 0,正如您在使用 [[ 运算符时看到的那样,returns 索引 0 处的列表元素不存在。

但是,当您使用 [ 运算符列表时,它 returns 包含该索引处的对象的列表。使用您的示例,查看使用每个运算符返回的内容的差异。

a <- list(1, 2, 3)
a[[1]] # 1
class(a[[1]]) # numeric (i.e. a vector)

a[1]
# [[1]]
# [1] 1
class(a[1]) # list

当您 运行 a[0] 时,您会得到一个包含索引 0 处的对象的列表,该对象不存在,即一个空的 list().

当您使用 [[]] 时,您是从列表中提取元素。因此,您将得到 a[[1]] = 1,但会出现 a[[0]]] 错误,因为没有这样的元素。

当您在列表中使用 [] 时,您正在对其进行切片 (sub-setting)。这就是为什么 a[1] = [[1]] 1a[0] returns 一个空元素(没有 zeroth 列表)。

这可以通过检查输出的 class 来明确。

class(a[[1]]) # -> numeric
class(a[1]) # -> list