如何在R中实现这个for循环?

如何在R中实现这个for循环?,r,for-loop,dataset,R,For Loop,Dataset,我正在尝试编写数据集的for循环。为了简单起见,我将写一个示例: Two variables, X and Y. X = 3, 6, 9 Y = 4, 8, 12 我想做一个循环,这样做: (Xi - Yi)^2, so first (3-4)^2, then (6-8)^2 and so on. 然后,在完成后,乘以: ((1/2)/(n*(n-1))). 在本例中,它将是: (3-4)^2 + (6-8)^2 + (9

我正在尝试编写数据集的for循环。为了简单起见,我将写一个示例:

 Two variables, X and Y.
         X = 3, 6, 9
         Y = 4, 8, 12
我想做一个循环,这样做:

   (Xi - Yi)^2, so first (3-4)^2, then 
   (6-8)^2 and so on.
然后,在完成后,乘以:

   ((1/2)/(n*(n-1))).
在本例中,它将是:

     (3-4)^2 + (6-8)^2 + (9-12)^2 = 1 + 4 + 9 = 14
     1/2 / (3*(3-1)) = 0.5 / 6 = 0.0833.
     0.0833 * 14 = 1.166.

    result <- 0
    sum <- rep(NA, n)
        for (i in (1:n)) {
          for(j in (1:n)) {
          sum <- ((gathered$X[i] - gathered$X[j])^2)
     }
      }
(3-4)^2+(6-8)^2+(9-12)^2=1+4+9=14
1/2 / (3*(3-1)) = 0.5 / 6 = 0.0833.
0.0833 * 14 = 1.166.

结果通常在R中,大多数情况下可以避免
循环。对于你的情况,你可以这样做

sum((X - Y)^2) * (1/2)/(length(X) * (length(X) - 1))
#[1] 1.166666667

但是,就
for
循环而言,您应该使用单个循环,因为您希望同时访问
X[i]
Y[i]

sum <- 0
n <- 3
for (i in (1:n)) {
    sum <- sum + (X[i] - Y[i])^2
 }
sum * (1/2)/(n*(n-1))
#[1] 1.1667

这个怎么样,我认为
外部
适合你的问题

案例1(X-Y) 情况2(所有X和Y计算)
如果您有两个向量
X
Y
,并且您想找到距离平方和,那么只需执行
sum((X-Y)^2)
谢谢您的快速回复!但是,在本例中,我需要使用for循环,因此我需要它。另外,在我正在使用的数据集中,5000个X和5000个Y的变量数。基本上,这就是如何得到(X1-Y1)^2+(X2-Y2)^2,依此类推,然后与前面提到的((1/2)/(n*(n-1))相乘@arziona即使你有5000个
X
s和5000个
Y
s,如果
X
Y
length
相同,并且你没有任何
NA
s,在这种情况下,你需要在
sum
中添加
NA.rm=TRUE
。你能在你的真实数据上测试一下并确认吗?@ronak_shah这不起作用,不知道为什么,因为我对R很陌生。X或Y中都没有NA。@arziona你说它不起作用是什么意思?它有没有给你任何错误信息?有什么警告吗?@ronak_shah没有,代码是这么说的,但我知道答案是什么,我不是从你提供的代码中得到的。
X = c(3, 6, 9)
Y = c(4, 8, 12)
sum(diag(outer(X,Y,function(X,Y)(X-Y)^2))) *
 (1/2)/(length(X) * (length(X) - 1))
1.166667
sum(outer(X,Y,function(X,Y)(X-Y)^2)) *
(1/2)/(length(X) * (length(X) - 1))
15.5