r - R 中的一切都是向量吗?

标签 r vector

我已经在 Python 中使用 Pandas 对我收集的数据进行了一些操作和回归并回答了 SO 问题,并且认为学习它的灵感可能有助于我的理解。

我正在使用 learn-R 教程并在 vector 之后以及对 SO 和网络的一些挖掘,我得出这个结论:

# So assigning a value to v will create an atomic vector
# of length one with a type
v <- 1
is.vector(v)  # TRUE
class(v)  # 'numeric'
# But literals are also vectors? These all return TRUE
is.vector(1)
is.vector("string literal")
is.vector(TRUE)
is.vector("c")

# and lists are vectors too
l <- list(1, 2, 3)
is.vector(l)  # TRUE

那么 R 中的一切都是向量吗?

最佳答案

不,有些东西在 R 中不是向量,但您希望存储数据的大多数方式都是向量。令人困惑的是 is.vector() 有一个奇怪的定义:它不允许属性。例如,

x <- 1:3
is.vector(x)
#> [1] TRUE
attr(x, "foo") <- "bar"
x
#> [1] 1 2 3
#> attr(,"foo")
#> [1] "bar"
is.vector(x)
#> [1] FALSE

reprex package 创建于 2021-09-07 (v2.0.0)

我会说 x 即使有属性也仍然是一个向量,但是 is.vector() 函数认为有属性的东西不是向量。举一个荒谬的例子:根据 is.vector(),因子不是向量,但您可以将它们视为:

x <- factor(letters[1:4])
is.vector(x)
#> [1] FALSE
x
#> [1] a b c d
#> Levels: a b c d
x[2:3]
#> [1] b c
#> Levels: a b c d

reprex package 创建于 2021-09-07 (v2.0.0)

因此,如果我们将向量定义为可以使用 [][[]] 进行索引的对象,那么大多数数据类型(从逻辑、整数构建的类型, numeric、complex、character 和 raw,以及列表)都是向量。 R 中没有这些类型的标量。

另一方面,如果您将向量定义为 is.vector() 返回 TRUE 的对象,则有很多数据类型不是向量:因子、矩阵、数组、时间序列、data.frames 等。所以不要那样做。 :-)

您使用文字的示例以这种方式工作,因为 R 不会以任何特殊方式处理文字值。它们只是赋予对象的表达式。

有些东西确实不是向量:NULL 对象、名称等语言对象(例如 as.name("x"))、环境、函数等.

关于r - R 中的一切都是向量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69091812/

相关文章:

C++ 在 vector<string> 中加载大文本文件的快速方法

java - 如何在 Java 中创建 vector 列表或列表数组

r - 从 R 中的数据框提取/ reshape 数据

r - 从字符串中提取数字并复制它们的关联值

c++ - 从(csv)的测试文件中读取并存储到房间对象中

r - 如何将 2 个字符向量的组合识别为预定义向量的名称

c++ - std::vector: vec.data() 或 &vec[0]

r 循环用于过滤每一列

r - 如何组合两个缺失值的向量?

tidyverse 中的重复变异