r - 使用逻辑向量进行向量索引

标签 r object vector logical-operators rgui

我是 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

有人可以帮忙吗?

最佳答案

我们获得结果是因为逻辑向量被回收(因为它的长度仅为 5,而 length(a) 的长度为 10)以满足 'a' 向量 i 的结尾。

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的文档中提到了回收

For [-indexing only: i, j, ... can be logical vectors, indicating elements/slices to select. Such vectors are recycled if necessary to match the corresponding extent. i, j, ... can also be negative integers, indicating elements/slices to leave out of the selection.


在大多数语言中,0 被视为 FALSE,其他值被视为 TRUE。因此,当我们否定 0 (FALSE) 时,将转换为 TRUE,将所有其他值转换为 FALSE

关于r - 使用逻辑向量进行向量索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68512905/

相关文章:

javascript - 从 JavaScript 渲染 HTML 数组中的每个对象

javascript - 将一个函数赋值给一个数的成员,为什么不失败呢?

C++ - map 包含太多元素

r - 理解模运算符 : %% 的结果

r - 基于 R 中的序列高效计算总和

r - 过滤器在 dplyr 中无法正常工作(找不到对象)

c++ - 将数据放入 C++ 中的 std::vector 是否会创建数据的拷贝?

python - 等效于 Python 和 PySpark 中的 R data.table 滚动连接

javascript - 不同的 URL 取决于语言 - Angular 2

c++ - QVector<T>::operator[] 失败:意外抛出 "index out of range"