我需要创建一个函数,该函数将数值矢量作为输入(例如(-2,-4,0,5,10))
我已经完成了第一部分的工作,但是我不知道如何去做第二部分(尝试了一些显而易见的解决方案,例如1 / y,其中y是向量,但是由于NA的原因,它不起作用,我认为)。
有人可以帮我吗?非常感谢。
答案 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