R.创建一个更改向量的函数

时间:2020-09-21 19:04:54

标签: r function vector

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

  1. 将所有0更改为“ NA”,然后
  2. 将其他值更改为1 / x(例如2-> 1/2)。

我已经完成了第一部分的工作,但是我不知道如何去做第二部分(尝试了一些显而易见的解决方案,例如1 / y,其中y是向量,但是由于NA的原因,它不起作用,我认为)。

有人可以帮我吗?非常感谢。

2 个答案:

答案 0 :(得分:0)

一种简单的解决方案是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,您可以原样保留或替换{{1 }}之后Inf

答案 1 :(得分:0)

您可以尝试

NA

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