使用is.na作为索引缓慢

时间:2014-05-15 06:51:57

标签: r

我是r的新手(具有MatLab的经验)。我仍在探索语法并学习以R方式思考。

我在data.frame类中有一些数据(3000 x 3000),以下代码似乎表现得非常慢。

data[is.na(data)] = 0 

我想从一些有经验的用户那里得到一些评论。谢谢。

1 个答案:

答案 0 :(得分:0)

假设您只是尝试将NA替换为0且您拥有所有数字,请使用矩阵。

x <- matrix(runif(9e+06,0,100),ncol=3000)
x[x <= 55 & x >= 54] <- NA
table(is.na(x))
  FALSE    TRUE 
8910086   89914
x[is.na(x)] <- 0
table(is.na(x))
  FALSE 
9000000

编辑:上面的转换只需不到1秒作为矩阵,但仍然只有3秒作为data.frame(不包括表命令,这是那里最慢的部分)。当你说的很慢时,你的意思是什么时候?

编辑:对Simon的回应

system.time(is.na(x) <- 0)
user  system elapsed 
0.024   0.044   0.068 # yes faster
table(is.na(x))
FALSE    TRUE 
8909945   90055 # doesn't change x
system.time(x[is.na(x)] <- 0)
user  system elapsed 
0.252   0.032   0.287 # slower
table(is.na(x))
FALSE 
9000000 # changes x