[R] How to spot/stop making the same mistake

Bill Dunlap w||||@mwdun|@p @end|ng |rom gm@||@com
Wed Jun 23 20:27:38 CEST 2021


Note that !! and !!! are special operators involving "quasiquotation" in
the dplyr package.

I would use as.logical(x) instead of !!x since its meaning is clear to any
user.

-Bill

On Wed, Jun 23, 2021 at 11:13 AM Jeff Newmiller <jdnewmil using dcn.davis.ca.us>
wrote:

> For the record, `!!` is not an operator so it does not "operate" on
> anything. The right ! does per the help page (?`!`) interpret non-zero
> values as TRUE and invert that logic, yielding a logical result even if the
> input is not logical. The left ! inverts that again, yielding a logical
> vector without the inversion.
>
> On June 23, 2021 10:39:07 AM PDT, Phillips Rogfield <thebudget72 using gmail.com>
> wrote:
> >Dear all,
> >
> >thank for for your suggestion.
> >
> >Yes I come from languages where 1 means TRUE and 0 means FALSE. In
> >particular from C/C++ and Python.
> >
> >Evidently this is not the case for R.
> >
> >In my mind I kind took for granted that that was the case (1=TRUE,
> >0=FALSE).
> >
> >Knowing this is not the case for R makes things simpler.
> >
> >Mine was just an example, sometimes I load datasets taken from outside
> >and variables are coded with 1/0 (for example, a treatment variable may
> >
> >be coded that way).
> >
> >I also did not know the !!() syntax!
> >
> >Thank you for your help and best regards.
> >
> >On 23/06/2021 17:55, Bert Gunter wrote:
> >> Just as a way to save a bit of typing, instead of
> >>
> >> > as.logical(0:4)
> >> [1] FALSE  TRUE  TRUE  TRUE  TRUE
> >>
> >> > !!(0:4)
> >> [1] FALSE  TRUE  TRUE  TRUE  TRUE
> >>
> >> DO NOTE that the parentheses in the second expression should never be
> >
> >> omitted, a possible reason to prefer the as.logical() construction.
> >> Also note that !!  "acts [only] on raw, logical and number-like
> >> vectors," whereas as.logical() is more general. e.g. (from ?logical):
> >>
> >> > charvec <- c("FALSE", "F", "False", "false",    "fAlse", "0",
> >> +              "TRUE",  "T", "True",  "true",     "tRue",  "1")
> >> > as.logical(charvec)
> >>  [1] FALSE FALSE FALSE FALSE    NA    NA  TRUE  TRUE  TRUE  TRUE
> > NA
> >>    NA
> >> > !!charvec
> >> Error in !charvec : invalid argument type
> >>
> >>
> >> Cheers,
> >> Bert
> >>
> >> Bert Gunter
> >>
> >> "The trouble with having an open mind is that people keep coming
> >along
> >> and sticking things into it."
> >> -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )
> >>
> >>
> >> On Wed, Jun 23, 2021 at 8:31 AM Eric Berger <ericjberger using gmail.com
> >> <mailto:ericjberger using gmail.com>> wrote:
> >>
> >>     In my code, instead of 't', I name a vector of indices with a
> >>     meaningful
> >>     name, such as idxV, to make it obvious.
> >>
> >>     Alternatively, a minor change in your style would be to replace
> >your
> >>     definition of t by
> >>
> >>     t <- as.logical(c(1,1,1,0,0))
> >>
> >>     HTH,
> >>     Eric
> >>
> >>
> >>     On Wed, Jun 23, 2021 at 6:11 PM Phillips Rogfield
> >>     <thebudget72 using gmail.com <mailto:thebudget72 using gmail.com>>
> >>     wrote:
> >>
> >>     > I make the same mistake all over again.
> >>     >
> >>     > In particular, suppose we have:
> >>     >
> >>     > a = c(1,2,3,4,5)
> >>     >
> >>     > and a variable that equals 1 for the elements I want to select:
> >>     >
> >>     > t = c(1,1,1,0,0)
> >>     >
> >>     > To select the first 3 elements.
> >>     >
> >>     > The problem is that
> >>     >
> >>     > a[t]
> >>     >
> >>     > would repeat the first element 3 times .....
> >>     >
> >>     > I have to either convert `t` to boolean:
> >>     >
> >>     > a[t==1]
> >>     >
> >>     > Or use `which`
> >>     >
> >>     > a[which(t==1)]
> >>     >
> >>     > How can I "spot" this error?
> >>     >
> >>     > It often happens in long scripts.
> >>     >
> >>     > Do I have to check the type each time?
> >>     >
> >>     > Do you have any suggestions?
> >>     >
> >>     > ______________________________________________
> >>     > R-help using r-project.org <mailto:R-help using r-project.org> mailing list
> >>     -- To UNSUBSCRIBE and more, see
> >>     > https://stat.ethz.ch/mailman/listinfo/r-help
> >>     <https://stat.ethz.ch/mailman/listinfo/r-help>
> >>     > PLEASE do read the posting guide
> >>     > http://www.R-project.org/posting-guide.html
> >>     <http://www.R-project.org/posting-guide.html>
> >>     > and provide commented, minimal, self-contained, reproducible
> >code.
> >>     >
> >>
> >>             [[alternative HTML version deleted]]
> >>
> >>     ______________________________________________
> >>     R-help using r-project.org <mailto:R-help using r-project.org> mailing list
> >--
> >>     To UNSUBSCRIBE and more, see
> >>     https://stat.ethz.ch/mailman/listinfo/r-help
> >>     <https://stat.ethz.ch/mailman/listinfo/r-help>
> >>     PLEASE do read the posting guide
> >>     http://www.R-project.org/posting-guide.html
> >>     <http://www.R-project.org/posting-guide.html>
> >>     and provide commented, minimal, self-contained, reproducible
> >code.
> >>
> >
> >       [[alternative HTML version deleted]]
> >
> >______________________________________________
> >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.
>
> ______________________________________________
> 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.
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list