将代码整合到循环中

时间:2017-02-08 21:40:42

标签: r

我在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

1 个答案:

答案 0 :(得分:0)

看起来您正在尝试执行以下操作:

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

注意:考虑到@ r2evans评论中的建议(见下文),重写了答案。之前使用了ifelse