我如何有效地进行二分法

and*_*kos 3 performance r

是否有更"有思想"的方式来有效地进行二分法?谢谢.

y<-c(0,3,2,1,0,0,2,5,0,1,0,0);b<-vector()

for (k in 1:length(y)) {
    if (y[k] == 0) b[k] = 0
    else
        b[k] = 1
}
y;b
Run Code Online (Sandbox Code Playgroud)

Sha*_*ane 6

试试这个:

b <- rep(0, length(y))
b[y != 0] <- 1
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为y和b的大小相同,rep()非常快/矢量化.

编辑:这是另一种方法:

b <- ifelse(y == 0, 0, 1) 
Run Code Online (Sandbox Code Playgroud)

ifelse()函数也是矢量化的.

  • 使用ifelse的效率远低于您的第一个建议.ifelse会创建一些向量,当y非常大时会减慢速度. (2认同)