如何在R中实现这个for循环?
我正在尝试编写数据集的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
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