R 使用is.na作为索引速度较慢
我是新手(有MatLab经验)。我仍在探索语法,并学习以一种更具创造性的方式思考 我在data.frame类中有一些数据(3000 x 3000),下面的代码似乎执行得非常慢R 使用is.na作为索引速度较慢,r,R,我是新手(有MatLab经验)。我仍在探索语法,并学习以一种更具创造性的方式思考 我在data.frame类中有一些数据(3000 x 3000),下面的代码似乎执行得非常慢 data[is.na(data)] = 0 我想从一些有经验的用户那里得到一些评论。谢谢 假设您正试图用0替换NA,并且您拥有所有数字,请使用矩阵 x <- matrix(runif(9e+06,0,100),ncol=3000) x[x <= 55 & x >= 54] <- NA t
data[is.na(data)] = 0
我想从一些有经验的用户那里得到一些评论。谢谢 假设您正试图用
0
替换NA
,并且您拥有所有数字,请使用矩阵
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
x您是否正在尝试将NA
转换为0
?在没有看到您的代码的情况下,很难做到精确,但一个常见的错误是在您真正需要矩阵时使用data.frame
。如果所有内容都是数字(或整数),则速度会快得多。否则,请尝试仅对需要它的列执行此操作,aladata[is.na(data[,2]),2]=0
。列类是什么?它们都是数值的吗?@JeremyS-是的,我正在尝试将NA转换为0。@RichardScriven-所有列都是数值的以前花了多长时间?这对我来说并没有改变x。如果我这样做的话,is.na(x)@JeremyS你是对的<代码>is.na
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