【问题标题】:How can values be assigned to the output of is.na()?如何将值分配给 is.na() 的输出?
【发布时间】:2019-11-11 00:55:29
【问题描述】:

以下与R语言有关。

x1 <- c(1, 4, 3, NA, 7)
is.na(x1) <- which(x1 == 7)

我不明白,最后一行的 LHS 为您提供了一个布尔向量,而 RHS 是一个值(在这种情况下,x ==7, 5 的索引)。那么给布尔向量赋值5是什么意思呢?

【问题讨论】:

  • 仔细阅读?is.na。这是一个非常令人困惑的功能 TBH 我还没有真正使用它

标签: r variable-assignment na assignment-operator


【解决方案1】:

is.na 来自文档返回:

应用于原子向量的 is.na 的默认方法返回与其参数 x 长度相同的逻辑向量,对于标记为 NA 的元素包含 TRUE,或者对于数字或复数向量,包含 NaN,否则为 FALSE。

因此,通过创建一个逻辑向量(您实质上是在说无论索引是TRUE,这应该是一个NA

通过将这些索引“匹配”到来自which 的相应索引,您可以将后者转换为NAs,无论FALSE 因此发生了变化。

付诸实践:

这是is.na(x1)的输出:

is.na(x1)
[1] FALSE FALSE FALSE  TRUE FALSE

which(x==7)的对应输出:

which(x1 == 7)
[1] 5

组合后,位置 5 的元素现在将变为 NA,因为它已被赋予逻辑 is.na(),返回 TRUE

is.na(x1) <- which(x1 == 7)
 x1
[1]  1  4  3 NA NA

上面将第一个索引变成了NAappends两个NAs,从而使索引7和NA

这可以通过以下方式最好地看到:

is.na(x1) <- c(1,7)
 x1
[1] NA  4  3 NA  7 NA NA

与文档中的此示例进行比较:

(xx <- c(0:4))
is.na(xx) <- c(2, 4)
 xx
[1]  0 NA  2 NA  4

从上面可以看出,c(2,4) 遵循xx 中的原始索引,因此其余的变为NAs。

【讨论】:

  • 是不是很奇怪?我从未注意到我所研究的语言中的这种行为。 a.) 在 LHS (is.na(x)) 中,我们只有一个布尔向量而不是 x。我们无权访问变量 x。 b.) 而且它不只是关于 (which(x==7),即使你直接在 RHS 上写 5,结果也会一样。它本质上归结为:c(FALSE,FALSE,FALSE,TRUE, FALSE) = 5 这是错误的。
  • 您将索引设置为NA。如果使用 5,它将索引 5 设置为 NA。重点是我们使用的是索引而不是值。
  • 对不起,我认为你没有明白我的意思。这两个命令在单独评估和重写时只不过是 c(FALSE,FALSE,FALSE,TRUE,FALSE) = 5。这怎么可能是真的?我认为 R 已经做了一些特殊的规定来处理 is.na() 的输出。否则,它没有任何意义。
  • 请阅读我的回答(再次??),让我知道,让我知道我应该在哪里特别重新阐述。
猜你喜欢
  • 2017-11-16
  • 2019-09-02
  • 1970-01-01
  • 2017-07-05
  • 1970-01-01
  • 2010-11-27
  • 2015-10-19
  • 1970-01-01
  • 2021-12-27
相关资源
最近更新 更多