在 R 中,是什么让 NULL 成为原子的,因此不能存在于向量中?

Mil*_*les 3 r

Jared P. Lander 的《R for Everyday》,第 14 页。54 它说“...NULL 是原子的,不能存在于向量内。如果在向量内使用,它就会消失。”

我理解原子的概念是不可分割的,NULL 代表“虚无”,通常用于处理未定义的返回。

因此,如果是 NULL 原子 b/c,它的值总是“无”,这意味着某些东西根本不存在,因此 R 的处理方式就是不让它存在于向量中,或者在列表中赋值时它会实际上删除该元素吗?

试图集中精力并找到更直观、更全面的答案。

Big*_*ger 5

在我看来,将向量视为“原子”更令人困惑,而不是有帮助。相反,请考虑 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#性别类型


Mar*_*ler 5

让我回到这个“老”问题。我是(创始)R 核心成员,对我们来说,“原子向量”是一个重要的概念,我们在文档和 R 源代码的许多地方都使用过本身,无论是在 R 级别还是 C 级别。

你的问题非常好: 目前is.atomic(NULL),在 R 中 返回的是这种情况 TRUE,但我们已经多次讨论过,这对某些人来说可能是直观的({“NULL作为 R 中最小的对象,你应该将其视为原子” }),但实际上与我们在许多地方定义“原子向量”的方式以及 C 级内部的isVectorAtomic()定义和使用方式相矛盾:在这种意义上的原子向量必须是 6 个原子向量之一类型:{逻辑、整数、双精度、复数、字符、原始}。

目前,我正在努力改变 R 未来版本必须成为的is.atomic() 计划 。这不是承诺,而是意图的声明。is.atomic(NULL)FALSE

  • 请注意,大约 10 天以来,在 R 的*开发*版本中,“R-devel”中,“is.atomic(NULL)”不再为 true,而是“真正”的“FALSE”。所以这种不一致很快就会消失。当前的 R-devel 预计在 2024 年 4 月左右成为 R(可能是版本 4.4.0):https://developer.r-project.org/blosxom.cgi/R-devel/NEWS/2023/09/29#n2023 -09-29 (3认同)