【问题标题】:Understanding the behaviour of Logical Indices [duplicate]了解逻辑索引的行为 [重复]
【发布时间】:2016-08-22 13:22:34
【问题描述】:

我有以下sn-p

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 在做什么?是否有某种隐藏的“如果……那么”-语句? 20, 17, 14, 11, 8... 显然是 True 但为什么呢?

【问题讨论】:

  • 学习help("[")。一切都在那里解释。并且您不应该在未了解此帮助页面中的大部分内容的情况下使用 R。
  • 请注意此表达式中的非NA 元素:x[rep_len(c(T, F, NA), length(x))]

标签: r indexing logical-operators


【解决方案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 所评论的,NAs 引用了文档

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

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

总而言之,在提取 x[NA] 时,它会返回为 NA,而在替换 x[NA] &lt;- 时,它不会选择任何要替换的元素。

【讨论】:

  • 我想当NAs 被用作索引时,检查"[&lt;-" 而不是"[" 的行为会更合适。正如?"[" 所说,x[NA] 返回NA,而x[NA] = value 被忽略。
  • 首先,感谢您的回答! ?"[" 和 ?"[
猜你喜欢
  • 2020-02-06
  • 2018-12-21
  • 2019-09-20
  • 1970-01-01
  • 2013-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多