我再次问这个问题,因为上次我根本不清楚。我有这些数据:
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
答案 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并且按行方式工作。
棘手的部分是意识到如果你在向量(矩阵的一行)上进行减法操作而不是在整个矩阵上进行减法。在这种情况下,因为你知道你有两列我可以处理它。如果你有一个更复杂的案例,你必须想出一个动态的方法。