我了解到,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)
那么向量的定义是错误的吗?我提到了本教程。
本教程简化了流程,可能引起混乱。它的定义描述了“基本向量类型”,但是也有“通用向量”。
根据语言定义(您应该学习):
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所有参数强制为同一类型。