R中vector的定义

Leo*_*Leo 2 r vector

我了解到,a vector is a sequence of data elements of the same basic type.那么我们将a在以下代码中调用什么(因为它同时包含数字和字符):

a = c(1,"b")
is.vector(a)
[1] TRUE
Run Code Online (Sandbox Code Playgroud)

那么向量的定义是错误的吗?我提到了本教程。

Rol*_*and 6

本教程简化了流程,可能引起混乱。它的定义描述了“基本向量类型”,但是也有“通用向量”。

根据语言定义(您应该学习):

2.1.1向量

可以将向量视为包含数据的连续单元格。通过诸如x [5]的索引操作访问单元。索引中提供了更多详细信息。

R具有六种基本(“原子”)向量类型:逻辑,整数,实数,复数,字符串(或字符)和原始。下表列出了不同向量类型的模式和存储模式。

typeof    mode      storage.mode 
logical   logical   logical
integer   numeric   integer 
double    numeric   double 
complex   complex   complex
character character character 
raw       raw       raw 
Run Code Online (Sandbox Code Playgroud)

单个数字(例如4.2)和字符串(例如“四点二”)仍然是长度为1的向量;没有更多的基本类型。长度为零的向量是可能的(并且很有用)。

2.1.2列表

列表(“通用向量”)是另一种数据存储方式。列表具有元素,每个元素可以包含任何类型的R对象,即列表的元素不必是同一类型。列表元素可通过三种不同的索引操作进行访问。这些将在索引中详细说明。

列表是向量,基本向量类型在需要排除列表的情况下称为原子向量。

来自help("is.vector")

如果mode =“ any”,则is.vector可以为原子模式,列表和表达式返回TRUE。对于任何模式,如果x具有除名称之外的任何其他属性,它将返回FALSE。[...]

expression基本上是一个list。)

请注意,因素不是向量。is.vector返回FALSE,而as.vector将mode =“ any”的因数转换为字符向量。

最后,正如@Henrik指出的那样,将c所有参数强制为同一类型。