来自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()我知道[]和[[]]是有区别的。我不完全理解它背后的区别或设计原则。
是否有一个PEP等价物为R阅读有关设计决策?
编辑:“重复”问题不适合我的问题,也没有被接受的答案。我问题的答案要好得多。
发布于 2022-05-04 09:20:12
使用[[]]时,您将从列表中提取元素。因此,您将有a[[1]] = 1,但是a[[0]]]有一个错误,因为没有这样的元素。
当您在列表中使用[]时,您正在对其进行切片(子设置)。这就是为什么a[1] = [[1]] 1和a[0]返回一个空元素(没有零列表)。
这一点可以通过检查输出的类来明确。
class(a[[1]]) # -> numeric
class(a[1]) # -> list发布于 2022-05-04 09:17:31
没有索引0,正如使用[[运算符时看到的那样,它在索引0处返回列表元素,而索引0不存在该元素。
但是,当您使用[运算符a list时,它会返回包含该索引处的对象的列表。使用您的示例,查看使用每个操作符返回的内容的差异。
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()。
https://stackoverflow.com/questions/72110405
复制相似问题