R 在向量中存储嵌套循环值
我想计算数据的平方和,并将其保存到向量中。所以我想我必须做一个嵌套循环。首先增加任意数,然后进行不同的观测。但它只有在我使用矩阵并通过apply函数进行总结时才起作用。但是,我只想使用矩阵和apply函数将输出直接保存在向量w/o中。也许我错了,有一个更简单的解决办法R 在向量中存储嵌套循环值,r,R,我想计算数据的平方和,并将其保存到向量中。所以我想我必须做一个嵌套循环。首先增加任意数,然后进行不同的观测。但它只有在我使用矩阵并通过apply函数进行总结时才起作用。但是,我只想使用矩阵和apply函数将输出直接保存在向量w/o中。也许我错了,有一个更简单的解决办法 x <- 1:3 #data y <- 5:7 # arbitrary values # doesnt work ssq <- numeric() for (j in 1:length(y)) { for
x <- 1:3 #data
y <- 5:7 # arbitrary values
# doesnt work
ssq <- numeric()
for (j in 1:length(y)) {
for (i in 1:length(x)){
ssq[j] <- (sum(((x[i]-y[j])^2)))
}
}
# works
z <- matrix(nrow = length(x), ncol = length(y))
for (j in 1:length(y)) {
for (i in 1:length(x)){
z[i,j] <- ((x[i]-y[j])^2)
}
}
ssq2 <- apply(z,2,sum)
x如果需要x
和y
中每对可能值之间的平方和,可以使用双循环。可能您只需要有序对(第一个在x
中,第一个在y
,第二个在x
中,第二个在y
,等等)。由于R具有矢量化功能,因此无需循环即可实现:
sum((x - y)^2)
# [1] 48
没有循环。如果您想降低效率并使用循环,您仍然只需要一个循环:
ssq = 0
for(i in 1:length(x)) {
ssq = ssq + (x[i] - y[i])^2
}
ssq
# [1] 48
当R已经矢量化时为什么要双循环
x如果问题是如何在问题末尾显示ssq2,但代码较少,那么请尝试sapply(y,函数(y)sum((x-y)^2))
或colSums(outer(x,y,“-”)^2)
@AnilGoyal,它运行时没有错误,但没有给出与问题末尾的ssq2相同的值。@G.Grothendieck,修改了答案,实际上,我正在尝试匹配ssq2
@G.Grothendieck的输出,这比我想象的要容易。这就是我想要的