我已经在 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/