如何在矩阵上使用for循环

如何在矩阵上使用for循环,r,for-loop,matrix,R,For Loop,Matrix,假设我有一个矩阵: A <- matrix(c(2,4,3,1,5,7), nrow=3, ncol=2) colnames(A) <- c ("x", "y") A x y [1,] 2 1 [2,] 4 5 [3,] 3 7 然后我会把它转换成欧几里德距离: (2,4) => sqrt(2^2 + 4^2) => 4.47 (1,2) => sqrt(1^2 + 2^2) => 2.24 和总距离 4.47

假设我有一个矩阵:

A <- matrix(c(2,4,3,1,5,7), nrow=3, ncol=2)
colnames(A) <- c ("x", "y")

A
     x y
[1,] 2 1
[2,] 4 5
[3,] 3 7
然后我会把它转换成欧几里德距离:

(2,4)   =>    sqrt(2^2 + 4^2)    => 4.47
(1,2)   =>    sqrt(1^2 + 2^2)    => 2.24
和总距离

4.47 + 2.24 = 6.71
我很有信心,如果我可以访问矩阵的每一行作为一个向量,我可以很容易地编写代码。然而,我很想听到任何更好的方法来做到这一点

我还考虑将矩阵转换为列表列表(即(x,y)点列表,其中每个点都是x和y值的列表)或点列表(x,y)


我在编程方面不是很有经验,而且我刚刚开始使用R,如果我没有什么意义,那么很抱歉。

您可以尝试以下方法

for (i in 1:nrow(A))
{
    row = A[i,]
    % Do something with the row
}
然而,我很想听到任何更好的方法来做到这一点

R具有用于距离计算的内置功能,如
dist
,例如:

out <- as.matrix(dist(A))
#         1        2        3
#1 0.000000 4.472136 6.082763
#2 4.472136 0.000000 2.236068
#3 6.082763 2.236068 0.000000
因此:


在制作一个可复制的示例方面做得很好,该示例清楚地列出了问题、您所需的结果以及您已经考虑过的内容。不过,作为一种未来的策略,您通常可以通过谷歌
R term
获得一些关于执行特定任务的相关R功能的线索。例如,
R distance
会直接引导您进入
dist
功能。谢谢,我不知道这有多简单。当我将row=A[,I]更改为row=A[I,]时,这会起作用,但我将使用最新邮件建议的dist函数。
out <- as.matrix(dist(A))
#         1        2        3
#1 0.000000 4.472136 6.082763
#2 4.472136 0.000000 2.236068
#3 6.082763 2.236068 0.000000
row(out) - col(out)==1
#      [,1]  [,2]  [,3]
#[1,] FALSE FALSE FALSE
#[2,]  TRUE FALSE FALSE
#[3,] FALSE  TRUE FALSE
out[row(out) - col(out)==1]
#[1] 4.472136 2.236068
sum(out[row(out) - col(out)==1])
#[1] 6.708204