我正在尝试编写数据集的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)
}
}
答案 0 :(得分:1)
通常,在R中,大多数时候可以避免for
循环。您可以的话
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
数据
X = c(3, 6, 9)
Y = c(4, 8, 12)
答案 1 :(得分:0)
我认为outer
适合您的问题。
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