2016-11-24 5 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] <- x[, 1] > x[, 2] 

これは論理的ではなく、数値の列を作成しますが、ほとんどの目的のために、それは十分に近いです:

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

、実際に

は、あなたも、これをさらに簡素化することができます。そうでない場合は、論理的な数値を数値に変換することができます。

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

私のマシンでは、これは約10倍高速です –

関連する問題