通过使用for循环的容差比较向量

时间:2018-09-19 14:14:49

标签: r for-loop if-statement

我有两个向量作为输出,它们的长度不同。现在,我想将一个向量的每个元素与另一个向量的每个元素进行比较。

假设这是我的两个向量:

r1 <- c(1.5,3.5,4.5,5.5,8.5,11.5,12.5,17.5)
min <- c(3,6,11)

我的compare命令看起来像这样:

m1 <- which(abs(outer(min, r1, `-`)) <= 0.5, arr.ind = TRUE)
cbind.data.frame(min = min[m1[,1]], r1 = r1[m1[,2]])

它可以正常工作,并提供以下输出:

  min   r1
1   3  3.5
2   6  5.5
3  11 11.5

我现在要问的是,仅通过使用for循环(可能与if else语句一起使用)如何做同样的事情?我已经想出了这个解决方案,但是我不知道如何整合公差(+/- 0.5)...

z<-rep(0,length(r1))
for(i in 1:length(r1))
{
  for(j in 1:length(min))
  {
    if(x[j]>y[i])
      z[i]=z[i]+1
  }
}

有什么想法吗?

编辑:

例如,如果我有以下矢量,如何获得最小矢量作为结果矢量:

 min
[1]  2 15
 r1
[1]  1.5  3.5  4.5  5.5  8.5 11.5 12.5 17.5

从@shirin运行代码后,我将其作为结果向量:

    V1   V2
1    2   1.5

出现此错误消息

  

rbind(res,cbind(min [i],hc [abs(hc-min [i])<= 0.5]))中的错误:
  矩阵的列数必须匹配(请参见参数2)

现在,如果我的res向量仅给我一行,我想将 min向量作为结果向量

1 个答案:

答案 0 :(得分:1)

这是您想要的:

        boolean boo = false;
        while (!boo) {
            System.out.print("Enter a credit card number (enter a blank line to quit): ");
            String cardNumberSt = input.nextLine();
            int cardNumber = Integer.parseInt(cardNumberSt);
            int numLength = String.valueOf(cardNumberSt).length();

            if (numLength > 16 || numLength < 16) {
                System.out.println("ERROR! You MUST have exactly 16 digits");
                System.out.println();
            } else if (numLength == 16) {
                System.out.println("16 digits!");
            }
        }