我已经涉足Python中的Pandas,对我收集的数据进行一些操作和回归并回答SO问题,并且认为学习它的灵感可能有助于我的理解。
我正在使用 learn-R 教程,经过向量和对 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
Run Code Online (Sandbox Code Playgroud)
那么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
Run Code Online (Sandbox Code Playgroud)
由reprex 包(v2.0.0)创建于 2021-09-07
我想说,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
Run Code Online (Sandbox Code Playgroud)
由reprex 包(v2.0.0)创建于 2021-09-07
因此,如果我们将向量定义为可以使用[]或进行索引的对象[[]],那么大多数数据类型(由逻辑、整数、数字、复数、字符和原始以及列表构建的类型)都是向量。R 中没有这些类型的标量。
另一方面,如果将向量定义为is.vector()返回的对象TRUE,则有很多数据类型不是向量:因子、矩阵、数组、时间序列、data.frames 等。所以不要这样做。:-)
您使用文字的示例就是这样工作的,因为 R 不以任何特殊方式处理文字值。它们只是给出对象的表达式。
有些东西确实不是向量:NULL对象、语言对象,如名称(例如as.name("x"))、环境、函数等。