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

William Michels wjm1 @end|ng |rom c@@@co|umb|@@edu
Wed Jun 23 23:23:46 CEST 2021


Hi Phillips,

Maybe these examples will be useful:

> vec <- c("a","b","c","d","e")
> vec[c(1,1,1,0,0)]
[1] "a" "a" "a"
> vec[c(1,1,1,2,2)]
[1] "a" "a" "a" "b" "b"
> vec[c(5,5,5,5,5)]
[1] "e" "e" "e" "e" "e"
> vec[c(NA,NA,NA,0,0,0,0)]
[1] NA NA NA
> vec[c(NA,NA,NA,1,1,1,1)]
[1] NA  NA  NA  "a" "a" "a" "a"
> vec[c(7:9)]
[1] NA NA NA
>
> R.version.string
[1] "R version 3.6.3 (2020-02-29)"

HTH, Bill.

W. Michels, Ph.D.








On Wed, Jun 23, 2021 at 10:39 AM 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.



More information about the R-help mailing list