Jared P. Lander 的《R for Everyday》,第 14 页。54 它说“...NULL 是原子的,不能存在于向量内。如果在向量内使用,它就会消失。”
我理解原子的概念是不可分割的,NULL 代表“虚无”,通常用于处理未定义的返回。
因此,如果是 NULL 原子 b/c,它的值总是“无”,这意味着某些东西根本不存在,因此 R 的处理方式就是不让它存在于向量中,或者在列表中赋值时它会实际上删除该元素吗?
试图集中精力并找到更直观、更全面的答案。
在我看来,将向量视为“原子”更令人困惑,而不是有帮助。相反,请考虑 R 在该语言中内置了一系列数据类型。它们是根据定义给出的并且彼此不同。
例如,一种这样的数据类型是“整数向量”,它表示整数值的序列。请注意,R 没有“整数”数据类型。如果我们谈论 R 中的整数 5,它实际上是一个长度为 1 的整数向量。
另一种内置数据类型是 NULL。有一个单一的NULL类型的对象,也称为NULL。由于 NULL 是一种类型和对象,但不是整数值,因此它不能是整数向量的一部分。
整数向量中的缺失数据用 NA 表示。在这种情况下,NA 被视为整数值。注意,NA也可以是数值、逻辑值等。NA不是数据类型,而是值。
内置数据类型的完整列表可以在 R 源代码和文档中找到,例如https://cran.r-project.org/doc/manuals/r-release/R-ints.html#性别类型
让我回到这个“老”问题。我是(创始)R 核心成员,对我们来说,“原子向量”是一个重要的概念,我们在文档和 R 源代码的许多地方都使用过本身,无论是在 R 级别还是 C 级别。
你的问题非常好: 目前is.atomic(NULL)
,在 R 中
返回的是这种情况 TRUE
,但我们已经多次讨论过,这对某些人来说可能是直观的({“NULL
作为 R 中最小的对象,你应该将其视为原子” }),但实际上与我们在许多地方定义“原子向量”的方式以及 C 级内部的isVectorAtomic()
定义和使用方式相矛盾:在这种意义上的原子向量必须是 6 个原子向量之一类型:{逻辑、整数、双精度、复数、字符、原始}。
目前,我正在努力改变 R 未来版本必须成为的is.atomic()
计划 。这不是承诺,而是意图的声明。is.atomic(NULL)
FALSE