【问题标题】:Why "FALSE" becomes a zero when assigned as part of a vector为什么“FALSE”在分配为向量的一部分时变为零
【发布时间】:2021-03-26 12:24:52
【问题描述】:

为什么,在 R 中,是这样的:

a <- FALSE
a
#> [1] FALSE

但是

b <- c(FALSE, 1)
b
#> [1] 0 1

a 不是长度为 1 的向量吗?为什么长度为 2 的向量的行为会有所不同?

这是因为所有向量元素都必须属于同一类型吗?

reprex package (v0.3.0) 于 2021-03-26 创建

【问题讨论】:

    标签: r vector


    【解决方案1】:

    是的,正如您所说,向量具有类型,并且向量的所有元素都被强制转换为可以包含尽可能多的原始信息的最具包容性的类型。

    typeof(FALSE) # logical
    typeof(c(FALSE, 1)) # double, i.e. double-precision numeric
    typeof(c(FALSE, 1, 'a')) # character
    

    要保持不同的类型,你需要一个列表:

    b <- list(FALSE, 1)
    

    这是可行的,因为列表的每个条目都有自己的类型。

    为什么有不同的类型?与double(每个条目 64 位)相比,logical 可以使用更少的内存(每个条目一位)进行存储,并且在某些情况下也可以更快地处理。

    【讨论】:

    • 那么数字类型比逻辑类型包含更多信息?
    • @Emy 是的,logical 类向量有 3 个可能的值 - TRUEFALSENA。有超过 3 个整数 [需要引用],所以 integer 类需要能够包含更多信息,而双 numeric 类甚至比 integer 更多。
    猜你喜欢
    • 2019-07-08
    • 2011-12-15
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-05
    相关资源
    最近更新 更多