【发布时间】:2018-03-08 15:30:02
【问题描述】:
我是 R 初学者,我知道这是非常基本的,很抱歉,但我无法通过遵循文档和类似线程找到自己的方法。
我正在尝试使用条件语句填充一个空矩阵mat2,并循环遍历另一个相同维度的数据帧的行和列ixj我用作参考矩阵,称为mat。在这个例子中,mat 也是我对mat2 的值的“来源”,但这在我的实际问题中并不完全正确,也与解决这个问题无关。我一直在努力让它像这样工作......
mat
1 -2 3
2 -4 6
3 -6 9
-4 8 -12
mat2 = matrix(0L, nrow = nrow(mat), ncol = ncol(mat))
for (i in nrow(mat)) {
for (j in ncol(mat)){
if (mat[i,j] >= 0) {
mat2[i,j] = 0
}
else {
mat2[i,j] = mat[i,j]
}
}
}
...导致...
mat2
0 0 0
0 0 0
0 0 0
0 0 -12
...不是我想要的。
我对我的 for 循环和条件单元格赋值的语法更感兴趣,除了这只是虚拟代码:我不需要替换 mat 中的值,而是创建一个新矩阵并用值填充它遵循特定的条件和方程式。
尽管如此,我不知道我做错了什么,任何帮助将不胜感激。
【问题讨论】:
-
输出应该是什么?
-
你的循环的问题只是你只迭代一个值。试试
for (i in 1:nrow(mat))而不是for (i in nrow(mat))。 -
是的,@AndrewGustar 是正确的,循环被破坏了,但是在 R 中,你不需要在循环中创建那个尴尬的循环只是为了对矩阵进行操作,因为矩阵只是具有维度属性的向量。
-
@AndrewGustar 我怎么会错过这个?
-
请问您为什么在 2 个循环中使用这种“索引和替换”结构?通常,当您发现自己在 R 中编写这样的循环时,您应该考虑是否存在解决问题的矢量化方法。