R或R中的for循环 - 计算矩阵的对角乘积
我试图在20x20矩阵中找到2位数字的最大对角乘积。R或R中的for循环 - 计算矩阵的对角乘积
这给出了一个错误信息:
i <- 17:1
z <- for (j in 1:(18-i))
{b <- max ((x[i,j]*x[i+1,j+1]*x[i+2,j+2]*x[i+3,j+3]))}}
但这并不:
z <- for (i <- 17:1)
{for (j in 1:(18-i))
{b <- max ((x[i,j]*x[i+1,j+1]*x[i+2,j+2]*x[i+3,j+3]))}}
但第二个版本给了我一个号码太小。为什么第一个不工作,我认为它会产生正确的答案,但我不明白错误信息。
这看起来不对。
您无法将for
循环的结果赋值给变量。而max()
是一个标量变量,这是无稽之谈。最后,未指定矩阵x
。我会用更小的东西重试,甚至可能会打印一些临时结果。
走之前跑步还是很好的建议。稍后,您仍然可以为sprint解决方案进行矢量化。
不会是一个向量,从哪个最大值可以给出最大值? – user446667 2010-10-07 18:02:18
另外,为了获取数据,我使用了read.table(“filename”),所以我不确定它是否是矩阵形式或任何表格。 – user446667 2010-10-07 18:04:01
好吧,这是一个数据帧 - 难以处理数据帧或矩阵? – user446667 2010-10-07 18:05:46
实际上,与德克相反,我相信你应该尽早知道R中的矢量化。您尝试实现的循环结构远非最佳,实际上是多余的。只有在非常特殊的情况下才能使用for循环。检查this question的讨论。查看便利功能的帮助文件,如diag()
,combn()
,prod()
和apply()
。
很容易将它们结合起来,做你想做的:
x <-matrix(1:400,ncol=20)
Diag <- diag(x)
Id <- combn(1:length(Diag),2)
Diag.prod <- apply(matrix(Diag[Id],ncol=2),1,prod)
Max.Diag.prod <- max(Diag.prod)
编辑:您使用的数据帧,但您可以使用as.matrix(x)
轻松地将其转换为一个矩阵。
http://www.philender.com/courses/multivariate/notes/matr.html和max() – 2010-10-07 17:55:39
实际上,您的解决方案都不起作用。我编辑了您的条目以更好地反映您的问题。如果您不同意,请回滚。 – 2010-10-08 10:17:47