【问题标题】:Why is NA^0 in R gives 1 and not NA [duplicate]为什么R中的NA ^ 0给出1而不是NA [重复]
【发布时间】:2017-08-03 11:31:40
【问题描述】:

我刚刚遇到了一个我想了解的 R 的奇怪行为。

当我执行NA^0 时,它会给出 1 而不是 NA 正如我所期望的那样。

示例:

v1 <- c(2,NA,1)
v1^0
[1] 1 1 1
v1**0
[1] 1 1 1

^** 是算术运算符 (help("^")),例如 -+ 等,在他们的情况下给出 NA:

v1+0
[1]  2 NA  1
v1-0
[1]  2 NA  1

为什么不同的算子对 NA 的表现不同?

【问题讨论】:

  • 我记得我的数学老师说过 “任何升到 0 的东西都是 1”。
  • 这就是它的作用。此结果已被用于许多 SO 答案,以在存在 NA 值的情况下生成矢量化解决方案。
  • NULL^0 = numeric(0)
  • NA 等同于 NULL。来自帮助文件?NA:“NA 是长度为 1 的逻辑常数,其中包含缺失值指示符。”来自?NULL,“NULL 表示 R 中的空对象。”这些是不同的概念。考虑一个带有变量 v1 的 data.frame,df。 df$v1 &lt;- NA 将变量的值设置为缺失,而 df$v1 &lt;- NULL 删除变量。

标签: r


【解决方案1】:

我以duplicate 的身份投票决定关闭它,但由于您的问题似乎是“我怎样才能避免这种行为并改为返回 NA”:

your_exp <- Vectorize(function(base, exp) ifelse(is.na(base),NA,base^exp))
v1 <- c(2,NA,1)

your_exp(v1,0)
# returns [1]  1 NA  1

请查看accepted answer 了解NA^0 == 1 的原因。

【讨论】:

    猜你喜欢
    • 2016-07-24
    • 1970-01-01
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 2021-07-25
    • 1970-01-01
    相关资源
    最近更新 更多