2016-11-24 92 views
1

我有这样的问题。我使用这种声明来管理它,但它会变慢。我可以使用应用函数提高性能吗?R避免使用应用的for循环

x<-matrix(sample(1:100,40),20,2) 
x<-as.data.frame(x) 
for (i in 1:nrow(x)) 
{ 
    if (x[i,1]>x[i,2]){ 
    x[i,3]<-1 
    } else { 
    x[i,3]<-0 
    } 
} 

回答

2

您不需要显式或隐式循环;只需使用ifelse

x[, 3] <- ifelse(x[, 1] > x[, 2], 1, 0) 

而事实上,你甚至可以进一步简化这个:

x[, 3] <- x[, 1] > x[, 2] 

这将创建一个列,它是合乎逻辑的,而不是数字,但对于大多数的目的这是足够接近。如果没有,可以将逻辑转换回数字:

x[, 3] <- as.numeric(x[, 1] > x[, 2]) 
+0

在我的机器上,这个速度大约快了10倍 –