【问题标题】:Vector Indexing using Logical vector使用逻辑向量的向量索引
【发布时间】:2021-10-01 09:23:43
【问题描述】:

我是 R 新手。我创建了一个对象 a: a <- c(2,4,6,8,10,12,14,16,18,20)

我对向量执行了以下操作: a[!c(10,0,8,6,0)] 我得到的输出为 4 10 14 20

我知道!c(10,0,8,6,0) 产生的输出为 FALSE TRUE FALSE FALSE TRUE

我不明白最终结果是如何得出的 4 10 14 20

有人可以帮忙吗?

【问题讨论】:

    标签: r object vector logical-operators rgui


    【解决方案1】:

    我们之所以获得结果,是因为逻辑向量被回收(因为它的长度只有 5 与 length(a) 为 10 相比)以满足“a”向量的结尾,即..e

    i1 <- rep(!c(10,0,8,6,0), length.out = length(a))
    i1
    [1] FALSE  TRUE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE  TRUE
    

    如果我们使用那个向量

    a[i1]
    [1]  4 10 14 20
    

    如果我们只是传递TRUE更容易理解,那么TRUE被回收返回所有元素或与FALSE相反

    a[TRUE]
     [1]  2  4  6  8 10 12 14 16 18 20
    a[FALSE]
    numeric(0)
    

    ?Extract的文档中提到了回收

    仅用于 [-indexing:i, j, ... 可以是逻辑向量,表示要选择的元素/切片。如有必要,这些向量将被回收以匹配相应的范围。 i, j, ... 也可以是负整数,表示要排除在选择之外的元素/切片。


    在大多数语言中,0 被视为 FALSE,其他值被视为 TRUE。所以,当我们取反时,0 (FALSE) 被转换为 TRUE,所有其他的都被转换为 FALSE

    【讨论】:

      猜你喜欢
      • 2014-02-23
      • 2019-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-17
      • 1970-01-01
      • 2021-06-20
      相关资源
      最近更新 更多