了解逻辑指数的行为

时间:2016-08-22 13:22:34

标签: r indexing logical-operators

我有以下代码段

x <- 20:1
x
x[c(T, F, NA)] <- 1
x
[1]  1 19 18  1 16 15  1 13 12  1 10  9  1  7  6  1  4  3  1  1

我不明白结果是如何生成的。我认为T = 1,F = 0并且NA也被视为假(因此NA = 0)。

所以我期待以下结果:

[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

有人可以向我解释R正在做什么吗?这些是隐藏的吗?如果......那么&#34; - 声明? 20, 17, 14, 11, 8...显然是True,但为什么?

1 个答案:

答案 0 :(得分:1)

您可以先查看,

x[T]
#[1] 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1

然后

x[F]
#integer(0)

同时检查,

x[NA]
# [1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA

R使用循环索引(不确定这是否是正确的词)

现在,当你做

x[c(T, F, NA)]

它给出了,

#[1] 20 NA 17 NA 14 NA 11 NA  8 NA  5 NA  2

它会打印所有T值,忽略所有F值,并使用NA代替所有NA值。

现在分配

x[c(T, F, NA)] <- 1

只有索引为T的索引才会被替换为1,其余全部都是原样,给出

#[1]  1 19 18  1 16 15  1 13 12  1 10  9  1  7  6  1  4  3  1  1

由@alexis_laz评论,NA引用文件

  

提取时,数字,逻辑或字符NA索引选择一个未知元素,因此在逻辑,整数,数字,复数或字符结果的相应元素中返回NA,并为列表返回NULL。

     

替换时(即在赋值的lhs上使用索引)NA不选择任何要替换的元素。由于是否应该使用rhs元素存在歧义,只有当rhs值为1时才允许这样做

总结一下,在提取x[NA]时,它会返回NA,而在替换x[NA] <-时,它不会选择任何要替换的元素。