2016-11-24 4 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 раз быстрее –