【问题标题】:How to get consistent output when checking for infinite values检查无限值时如何获得一致的输出
【发布时间】:2018-03-01 04:59:08
【问题描述】:
# works fine
check = c(1,2,3,4, Inf)
out   = check[-which(check == Inf)]
print(out)
# [1] 1 2 3 4

# does not work fine 
check = c(1,2,3,4)
out   = check[-which(check == Inf)]
print(out)
# numeric(0)

第一个示例创建了一个具有正确值 1、2、3、4 的 out变量。第二个变量创建一个空变量out,因为 which 函数返回 integer(0) 并且显然从检查向量中删除 integer(0) 给出了 0 个元素。

我知道如何用几行来写这个,但是有一个单行吗?

【问题讨论】:

  • 试试check[ !is.na(check) ] ?编辑后:check[ is.finite() ]?
  • 我把问题改成了 Inf。但这对 Inf 也适用,谢谢。你为什么不把它作为一个答案?
  • 你也可以直接删除which并写check[check != Inf]

标签: r


【解决方案1】:

不确定这在技术上是否是单线...

out   = if (any(is.na(check))) {check[-which(is.na(check))]} else {check}

【讨论】:

  • 是的,但另一种解决方案更清洁;)
【解决方案2】:

试试看,is.finite()

# example 1
check <- c(1, 2, 3, 4, Inf)
out <- check[ is.finite(check) ]
out
# [1] 1 2 3 4

# example 2
check <- c(1, 2, 3, 4)
out <- check[ is.finite(check) ]
out
# [1] 1 2 3 4

相关帖子:is.finite().

【讨论】:

    【解决方案3】:
    check = c(1,2,3,4)
    out   = check[!is.infinite(check)]
    print(out)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-27
      • 1970-01-01
      • 2015-12-23
      • 1970-01-01
      • 2016-10-27
      • 1970-01-01
      相关资源
      最近更新 更多