[R] replacing a value

Jeff Newmiller jdnewm|| @end|ng |rom dcn@d@v|@@c@@u@
Wed Apr 6 06:40:32 CEST 2022


I really don't think your R is broken, and I am puzzled why Jim didn't refer you to R FAQ 7.31 [1].

To cut to the chase... using == is not advised with floating point numbers, unless you know that the numbers have no fractional part. 19.9999999999999 prints as 20 given the default number of significant digits used to print numeric vectors, but that doesn't mean it _is_ 20.

is_near <- function( x, a, atol = 1e-6 ) {
  abs( x - a ) < atol
}
a[ is_near( a, 20 ) ] <- 0

Also see [2]... this is by no means unique to R.

[1] https://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-doesn_0027t-R-think-these-numbers-are-equal_003f
[2] https://0.30000000000000004.com/


On April 5, 2022 9:18:01 PM PDT, ani jaya <gaaauul using gmail.com> wrote:
>Hello Jim,
>
>Thank you for the try. I am following your step and still have the problem.
>But I know for sure now that my R/system is somewhat "broken" or I do
>not know for sure.
>
>> a
>[1] 20.00000 20.00000 14.23756 20.00000 20.00000 20.00000 16.30921
>20.00000 20.00000 20.00000
>[11] 20.00000 20.00000 20.00000 20.00000 20.00000 14.85909 16.17894
>20.00000 20.00000 20.00000
>[21] 20.00000 27.64041 20.00000 20.00000 20.00000 20.00000 20.00000
>21.98571 20.00000 20.00000
>[31] 20.00000 20.00000
>> a==20
>[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
>FALSE FALSE FALSE FALSE FALSE
>[17] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
>FALSE FALSE FALSE FALSE FALSE
>> a[a==20]<-0
>> a
>[1] 20.00000 20.00000 14.23756 20.00000 20.00000 20.00000 16.30921
>20.00000 20.00000 20.00000
>[11] 20.00000 20.00000 20.00000 20.00000 20.00000 14.85909 16.17894
>20.00000 20.00000 20.00000
>[21] 20.00000 27.64041 20.00000 20.00000 20.00000 20.00000 20.00000
>21.98571 20.00000 20.00000
>[31] 20.00000 20.00000
>
>On Wed, Apr 6, 2022 at 12:16 PM Jim Lemon <drjimlemon using gmail.com> wrote:
>>
>> Hi Ani,
>> It seems to work for me:
>>
>>  a<-c(20, 20, 14.2375646029948, 19.9999999999999, 20, 20, 16.3092078677214,
>> 20, 20, 20, 20, 20, 20, 20, 20, 14.8590932408795, 16.178935255298,
>> 20, 20, 20, 20, 27.6404077886079, 20, 20, 20, 20, 20, 21.9857063037444,
>> 20, 20, 20, 20)
>> > a==20
>> [1]  TRUE  TRUE FALSE FALSE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE
>> [13]  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE
>> [25]  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE
>> > a[a==20]<-0
>> > a
>> [1]  0.00000  0.00000 14.23756 20.00000  0.00000  0.00000 16.30921  0.00000
>> [9]  0.00000  0.00000  0.00000  0.00000  0.00000  0.00000  0.00000 14.85909
>> [17] 16.17894  0.00000  0.00000  0.00000  0.00000 27.64041  0.00000  0.00000
>> [25]  0.00000  0.00000  0.00000 21.98571  0.00000  0.00000  0.00000  0.00000
>>
>> Notice that it didn't make 19.99999999999999 equal to 20, but did
>> round it up when printing the result. How do you know that it failed?
>>
>> Jim
>>
>> On Wed, Apr 6, 2022 at 12:48 PM ani jaya <gaaauul using gmail.com> wrote:
>> >
>> > Dear R-Help,
>> >
>> > I try to change a specific value here by following these:
>> >
>> > https://www.journaldev.com/39695/replace-in-r
>> > https://stackoverflow.com/questions/5824173/replace-a-value-in-a-data-frame-based-on-a-conditional-if-statement
>> > https://stackoverflow.com/questions/54615462/how-to-replace-certain-values-in-a-specific-rows-and-columns-with-na-in-r
>> > ..and many more
>> >
>> > however, it is not change anything. I believe it "should" be easy but
>> > I think I am missing something. I am afraid it is my system that has a
>> > problem but restarting r is not solve the problem.
>> > I just want to change 20 to 0 in my data.
>> >
>> > > dput(a)
>> > c(20, 20, 14.2375646029948, 19.9999999999999, 20, 20, 16.3092078677214,
>> > 20, 20, 20, 20, 20, 20, 20, 20, 14.8590932408795, 16.178935255298,
>> > 20, 20, 20, 20, 27.6404077886079, 20, 20, 20, 20, 20, 21.9857063037444,
>> > 20, 20, 20, 20)
>> >
>> > what I did:
>> > a[a==20]<-0 #fail
>> > a<-replace(a,a==20,0) #fail
>> > a[which(a==20)]<-0 #fail
>> >
>> > > sessionInfo()
>> > R version 4.1.2 (2021-11-01)
>> > Platform: x86_64-w64-mingw32/x64 (64-bit)
>> > Running under: Windows 10 x64 (build 19043)
>> >
>> > Matrix products: default
>> >
>> > locale:
>> > [1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252
>> > [3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C
>> > [5] LC_TIME=English_United States.1252
>> > system code page: 949
>> >
>> > Best,
>> > Ani
>> >
>> > ______________________________________________
>> > R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> > https://stat.ethz.ch/mailman/listinfo/r-help
>> > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>> > and provide commented, minimal, self-contained, reproducible code.
>
>______________________________________________
>R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
>https://stat.ethz.ch/mailman/listinfo/r-help
>PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>and provide commented, minimal, self-contained, reproducible code.

-- 
Sent from my phone. Please excuse my brevity.



More information about the R-help mailing list