[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