如何编写一个将任何值更改为0到0的函数?
我目前的做法:
> numbersGreaterZeroAreOne(c(0.001, 0, 1, 2, 3, 4))
[1] 1 0 1 1 1 1
和我的实施:
numbersGreaterZeroAreOne <- function(x) {
x <- x/x
x[is.na(x)] <- 0
return(x)
}
但是,我认为我的功能有效,但我不太喜欢它,通过零和NaN
值使用devision似乎不自然。
答案 0 :(得分:2)
您可以使用向量分配[<-
和逻辑运算符!=
> x <- c(0.001, 0, 1, 2, 3, 4)
> f <- function(x) { x[x != 0] <- 1; x }
> f(x)
# [1] 1 0 1 1 1 1
或者你可以做一点诡计
> g <- function(x) { as.logical(x)+0 }
> g(x)
# [1] 1 0 1 1 1 1
后者似乎要快得多
> library(microbenchmark)
> microbenchmark(f(x), g(x))
# Unit: nanoseconds
# expr min lq median uq max neval
# f(x) 2320 2642.5 2757.5 2864.0 24662 100
# g(x) 955 1080.0 1408.0 1487.5 12219 100