我有以下代码段
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
,但为什么?
答案 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] <-
时,它不会选择任何要替换的元素。