Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.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 无法删除不相关的浮点值_R - Fatal编程技术网

R 无法删除不相关的浮点值

R 无法删除不相关的浮点值,r,R,数据集样本 通过此方法读入,除date.time之外的所有列都是数字 然而,当我查看maloo.RM.outlier的数据集时,没有值-99.9,所以我接着搜索 which(maloo.RM.outlier$Hs == -99.9, arr.ind = T) [1] 11501 13775 我试着查看编号为11501和13775的行,其中没有-99.9个值。我已经尝试过了,清除全局环境数据,重新启动R会话,但似乎没有任何东西能够完全去除-99.9的值,而摘要仍然显示最小值=-99.9。有人知

数据集样本

通过此方法读入,除date.time之外的所有列都是数字

然而,当我查看maloo.RM.outlier的数据集时,没有值-99.9,所以我接着搜索

which(maloo.RM.outlier$Hs == -99.9, arr.ind = T)

[1] 11501 13775
我试着查看编号为11501和13775的行,其中没有-99.9个值。我已经尝试过了,清除全局环境数据,重新启动R会话,但似乎没有任何东西能够完全去除-99.9的值,而摘要仍然显示最小值=-99.9。有人知道如何删除浮点值吗?

因为,你不能真正测试浮点相等性,只是一个近似值。有几种方法可以做到这一点,但一种流行的(也是我最喜欢的)方法是减去我的限制/相等,然后寻找低于阈值的值

因为实际值可能在比较值的任一侧(pos/neg),所以我们可以使用绝对值来考虑这一点。生成的代码将更改您的

any(y == -99.9)

尽管它使用的是一种更为稳健的方法,通过使用
.Machine$double.eps^0.5
,找到略高于“接近零”量级的东西

我选择了
1e-9
作为code golf,不过如果你正在编程某个东西,你可能应该给它起个有意义的名字,这样它就不是一个“神奇常数”。也许是因为,你不能真正测试浮点等式,只是一个近似值。有几种方法可以做到这一点,但一种流行的(也是我最喜欢的)方法是减去我的限制/相等,然后寻找低于阈值的值

因为实际值可能在比较值的任一侧(pos/neg),所以我们可以使用绝对值来考虑这一点。生成的代码将更改您的

any(y == -99.9)

尽管它使用的是一种更为稳健的方法,通过使用
.Machine$double.eps^0.5
,找到略高于“接近零”量级的东西


我选择了
1e-9
作为code golf,不过如果你正在编程某个东西,你可能应该给它起个有意义的名字,这样它就不是一个“神奇常数”。也许
tol可能的重复:好的,浮点值,是有意义的,您能告诉我如何隔离行吗。例如,sum(maloo.RM.outlier$Hs<0)输出[2],但我甚至找不到这两个负值。
any(abs(y+99.9)<1e-9)
应该找到它们。@tcratius我喜欢
dplyr
包中的
near
,而不是
any(y=-99.9)
你可以做
dplyr::near(y,-99.9)
@r2evans和Marius请尽可能回答,因为他们已经解决了我的问题。r2evans,你的答案使用apply函数效果更好,但是我可以在Marius的答案中看到值。可能的重复:好的,浮点值,是有意义的,你能告诉我如何隔离行吗。例如,sum(maloo.RM.outlier$Hs<0)输出[2],但我甚至找不到这两个负值。
any(abs(y+99.9)<1e-9)
应该找到它们。@tcratius我喜欢
dplyr
包中的
near
,而不是
any(y=-99.9)
你可以做
dplyr::near(y,-99.9)
@r2evans和Marius请尽可能回答,因为他们已经解决了我的问题。r2evans,你的答案使用apply函数效果更好,但是我可以在Marius的答案中看到它的值。您好@r2evans,如果您想下载Maloolaba,请访问完整的Maloolaba示例数据集。我个人发现使用
maloo.RM.outlier Hi@r2evans,如果您想下载Maloolaba,请访问完整的Maloolaba示例数据集。我个人发现使用
maloo.RM.outlier
summary(maloo.RM.outlier)

          Date.Time           Hs               Hmax        
 1/01/2018 1:00 :    1   Min.   :-99.900   Min.   :-99.900  
 1/01/2018 1:30 :    1   1st Qu.:  0.805   1st Qu.:  1.350  
 1/01/2018 10:00:    1   Median :  1.112   Median :  1.870  
 1/01/2018 10:30:    1   Mean   :  1.234   Mean   :  2.089  
 1/01/2018 11:00:    1   3rd Qu.:  1.608   3rd Qu.:  2.700  
 1/01/2018 11:30:    1   Max.   :  4.257   Max.   :  7.262  
 (Other)        :14543                                      
       Tp                Tz          Peak.Direction      SST       
 Min.   :-99.900   Min.   :-99.900   Min.   :  5    Min.   :19.80  
 1st Qu.:  7.529   1st Qu.:  5.035   1st Qu.: 91    1st Qu.:21.00  
 Median :  9.146   Median :  5.568   Median :105    Median :23.00  
 Mean   :  9.245   Mean   :  5.679   Mean   :103    Mean   :23.43  
 3rd Qu.: 10.903   3rd Qu.:  6.257   3rd Qu.:119    3rd Qu.:26.00  
 Max.   : 21.121   Max.   : 10.146   Max.   :358    Max.   :28.65 
which(maloo.RM.outlier$Hs == -99.9, arr.ind = T)

[1] 11501 13775
any(y == -99.9)
any( abs(y + 99.9) < 1e-9 )