如何迭代矩阵的特定行?

时间:2018-02-20 18:43:06

标签: r loops matrix row

我再次问这个问题,因为上次我根本不清楚。我有这些数据:

matrix.test = matrix(c(2, 4, 3, 1, 5, 7), nrow=3, ncol=2)
a <- c(1,5)

我想仅在第一行和第三行上运行以下公式。第一行是:sqrt(sum(matrix.test[1,]-a)^2),第3行是sqrt(sum(matrix.test[3,]-a)^2)。第一个等式的结果是3,第二个等式的结果是4.

但是如果我有一个更大的矩阵,我怎么能告诉R在特定行上运行等式,而不是一遍又一遍地输入相同的等式到控制台?我不明白如何迭代矩阵的特定行。输出的内容并不重要。它可以是一个矩阵,例如

      [,1] 
[1,]    3    
[2,]    4  

或者只是一个载体,例如[1] 3 4

1 个答案:

答案 0 :(得分:0)

使用更好的答案进行更新:

假设您有一个带行号的向量。 基本思想是您可以使用该向量来指示行,例如 matrix.test[c(1,3),]。 我你想要喜欢这个:

matrix.test.new <- matrix(c(matrix.test[rows,1] - a[1],
                          matrix.test[rows,2] - a[2]),
                          nrow = length(rows), ncol = 2)
sqrt((rowSums(matrix.test.new))^2)

当然,您可以通过其他方式生成rows,例如测试奇数等等。

但是,您尝试做的事情存在一些问题。首先,你在没有检查标志的情况下采取平方根。如果你打算为未知输入写作,你总是会知道你有积极的结果,或者你准备以NaN作为答案吗?

其次,矩阵上的sum()函数可能没有按照您的想法进行。这就是我们使用rowSums()的内容,因为它明确地处理行而不是整个矩阵。

但是,我的示例向您显示,在R中,您不会以其他语言的方式进行迭代,但该示例使用的函数不会生成NaN并且按行方式工作。

棘手的部分是意识到如果你在向量(矩阵的一行)上进行减法操作而不是在整个矩阵上进行减法。在这种情况下,因为你知道你有两列我可以处理它。如果你有一个更复杂的案例,你必须想出一个动态的方法。