Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用is.na作为索引速度较慢_R - Fatal编程技术网

R 使用is.na作为索引速度较慢

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

我是新手(有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
table(is.na(x))
  FALSE    TRUE 
8910086   89914
x[is.na(x)] <- 0
table(is.na(x))
  FALSE 
9000000

x您是否正在尝试将
NA
转换为
0
?在没有看到您的代码的情况下,很难做到精确,但一个常见的错误是在您真正需要
矩阵时使用
data.frame
。如果所有内容都是数字(或整数),则速度会快得多。否则,请尝试仅对需要它的列执行此操作,ala
data[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