如何将值分配给 is.na() 的输出?
Posted
技术标签:
【中文标题】如何将值分配给 is.na() 的输出?【英文标题】:How can values be assigned to the output of 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 我还没有真正使用它 【参考方案1】:is.na
来自文档返回:
应用于原子向量的 is.na 的默认方法返回与其参数 x 长度相同的逻辑向量,对于标记为 NA 的元素包含 TRUE,或者对于数字或复数向量,包含 NaN,否则为 FALSE。
因此,通过创建一个逻辑向量(您实质上是在说无论索引是TRUE
,这应该是一个NA
。
通过将这些索引“匹配”到来自which
的相应索引,您可以将后者转换为NA
s,无论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
上面将第一个索引变成了NA
和appends
两个NA
s,从而使索引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
中的原始索引,因此其余的变为NA
s。
【讨论】:
是不是很奇怪?我从未注意到我所研究的语言中的这种行为。 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() 的输出。否则,它没有任何意义。
请阅读我的回答(再次??),让我知道,让我知道我应该在哪里特别重新阐述。以上是关于如何将值分配给 is.na() 的输出?的主要内容,如果未能解决你的问题,请参考以下文章