【问题标题】:R. Creating a function to change vectorsR. 创建一个函数来改变向量
【发布时间】:2020-09-21 19:04:54
【问题描述】:

我需要创建一个函数,该函数将数值向量作为输入(例如 (-2, -4, 0, 5, 10))并将

  1. 将所有 0 更改为 'NA' 和
  2. 将其他值更改为 1/x(例如 2->1/2)。

我已经设法完成了第一部分,但我不知道如何做第二部分(尝试了明显的解决方案,例如 1/y,其中 y 是一个向量,但由于 NA,它不起作用,我假设)。

谁能帮我解决这个问题?非常感谢。

【问题讨论】:

  • 一个简单的 if/else 语句就足够了。你能展示一下你是如何完成第一部分的吗?

标签: r function vector


【解决方案1】:

一个简单的解决方案是ifelse

ivansfun <- function(x) ifelse(x == 0, yes = NA, no = 1/x)

像这样工作

> ivansfun( c(-2, -4, 0, 5, 10) )
[1] -0.50 -0.25    NA  0.20  0.10

有一个重要的警告:通常您应该避免将==x == 0 中的浮点变量一起使用。这是一个复杂但重要的问题,值得阅读的不仅仅是一个 stackoverflow 答案。从这里开始,然后使用搜索引擎搜索相等的浮点数:https://floating-point-gui.de/errors/comparison/

更好的算法可能是只计算1/0,这在大多数语言中是一个错误,但在 R 中不是。在 R 中,这将给出 Inf,您可以保持原样或将 Infs 替换为 @987654330之后@@。

【讨论】:

    【解决方案2】:

    你可以试试

    foo <- function(x){
      1/dplyr::na_if(x, 0)
    }
    
    foo(c(-2, -4, 0, 5, 10))
    [1] -0.50 -0.25    NA  0.20  0.10
    

    na_if(1/c(-2, -4, 0, 5, 10), Inf)
    

    【讨论】:

      猜你喜欢
      • 2020-07-15
      • 1970-01-01
      • 2018-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-25
      • 2021-08-14
      相关资源
      最近更新 更多