Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在向量中存储嵌套循环值_R - Fatal编程技术网

R 在向量中存储嵌套循环值

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

我想计算数据的平方和,并将其保存到向量中。所以我想我必须做一个嵌套循环。首先增加任意数,然后进行不同的观测。但它只有在我使用矩阵并通过apply函数进行总结时才起作用。但是,我只想使用矩阵和apply函数将输出直接保存在向量w/o中。也许我错了,有一个更简单的解决办法

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的输出,这比我想象的要容易。这就是我想要的