2017-02-08 6 views
-1

私は以下のコードをRに書いていますが、これは私がやろうとしていることを成し遂げますが、ループで効率を上げて、このテストのサンプルを10000回繰り返し実行する必要がありますデータ。ループにコードを連結

私は両方のテストを行う必要があるので、データセットを使用してください。

PerfectMate <- sample(1:20,20,replace = FALSE,prob = NULL) 
date.mode <- PerfectMate[1:3] 
marry.mode <- PerfectMate[4:20] 

PerfectMate <- c(2,1,16,8,6,3,15,5,9,12,17,4,13,14,10,20,19,7,18,11) 
date.mode <- PerfectMate[1:3] 
marry.mode <- PerfectMate[4:20] 

if (marry.mode[1] < min(date.mode)) {marry.rank <- marry.mode[1]} else { 
if (marry.mode[2] < min(date.mode)) {marry.rank <- marry.mode[2]} else { 
    if (marry.mode[3] < min(date.mode)) {marry.rank <- marry.mode[3]} else { 
    if (marry.mode[4] < min(date.mode)) {marry.rank <- marry.mode[4]} else { 
    if (marry.mode[5] < min(date.mode)) {marry.rank <- marry.mode[5]} else { 
     if (marry.mode[6] < min(date.mode)) {marry.rank <- marry.mode[6]} else { 
     if (marry.mode[7] < min(date.mode)) {marry.rank <- marry.mode[7]} else { 
      if (marry.mode[8] < min(date.mode)) {marry.rank <- marry.mode[8]} else { 
      if (marry.mode[9] < min(date.mode)) {marry.rank <- marry.mode[9]} else { 
       if (marry.mode[10] < min(date.mode)) {marry.rank <- marry.mode[10]} else { 
       if (marry.mode[11] < min(date.mode)) {marry.rank <- marry.mode[11]} else { 
        if (marry.mode[12] < min(date.mode)) {marry.rank <- marry.mode[12]} else { 
        if (marry.mode[13] < min(date.mode)) {marry.rank <- marry.mode[13]} else { 
         if (marry.mode[14] < min(date.mode)) {marry.rank <- marry.mode[14]} else { 
         if (marry.mode[15] < min(date.mode)) {marry.rank <- marry.mode[15]} else { 
          if (marry.mode[16] < min(date.mode)) {marry.rank <- marry.mode[16]} else { 
          if (marry.mode[17] < min(date.mode)) {marry.rank <- marry.mode[17]} else { 
           marry.rank <- NA } 
} } } } } } } } } } } } } } } } 
marry.rank 
+6

聖なる条件付きバットマン! Find(function(x)x

+1

これは芸術作品のようです! –

+0

これはサーカスのミラーハウスのように見えますが、向かい合う2つのミラーがあります。または[インセプション]の第17レベル(http://www.imdb.com/title/tt1375666/)。 – r2evans

答えて

0

次のやろうとしているように見えます:

idxs <- which(marry.mode < min(date.mode)) 
marry.rank <- if (length(idxs) > 0) marry.mode[idxs[1]] else NA 

注:答えを考慮する@ r2evansによってコメントで提案を取って書き直された(下記参照)。以前はifelseが使用されていました。

+1

ここで 'ifelse'を使うことは不要で非効率です。私は代替手段として提案したい: 'if(length(idxs)> 0)marry.mode [idxs [1]] else NA'。 'ifelse'手荷物の一部がなくても機能的に同じです。 – r2evans

+0

@ r2evansは非常によく効率的に動作します、ありがとうございます。今私はベクトルの長さを変更するためにxまたはnに変数を入力するときにアクションを実行する式にこれを入れる必要があります。また、私は式の5000反復のシミュレーションを実行するforループを作成する必要があります。 – georgiaboy95

+0

@ r2evansここに私のコードがあります... choice_of_mate < - function(x、n){ PerfectMate < - サンプル(1:x、x、replace = FALSE、prob = NULL) date.mode < - PerfectMate [1 : marry.rank < - (marry.mode 0)marry.mode [marry.rank [1]他NA } marry.rank } choice_of_mate(20,3) – georgiaboy95

関連する問題