2017-05-07 95 views
1

我有一个大矩阵(500行×30000列)的零和一个。为此,我添加了包含0和1之间的值的行501.如果行501中的值对于列x> 0.5,我想用1中的所有零和全部1替换该列中的零。我已经实现代码如下:如何替换矩阵的指定列中的元素?

for(x in 1:30000){ 
    if (matrix[501,x] > 0.5){ 
    for(y in 1:500){ 
     matrix[matrix[y,x]==1] <- 0 
     matrix[matrix[y,x]==0] <- 1 
    } 
    } 
} 
matrix 

此代码连续运行,并且我停止它之前已经走了长达2个小时,所以我没有错误消息的报告。我怎样才能清理它?我究竟做错了什么?

+0

您使用的为O(n^2)算法,此外,循环被设定为R非常缓慢。阅读这篇文章http://bigocheatsheet.com/。这会让您了解如何重写您的代码 –

+1

还要注意,您的第一条替换线将由您的第二条替换线撤消。 – lmo

+0

谢谢lmo和Kppatel。没想到,也许我陷入了一个更换的循环。 – Dirigible

回答

3

您可以使用x <- 1 - x将0 - > 1和1 - > 0一起翻转。

所以,你将不得不

toFlip <- matrix[501,] > 0.5 
matrix[1:500, toFlip] <- 1 - matrix[1:500,toFlip] 
+0

另外'!矩阵[1:500,toFlip]'起作用('!x'翻转0到1,反之亦然)。 – nicola

+0

我想这取决于你是否想要一个数字或布尔值。 –

相关问题