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 at gmail.com
> <mailto:ericjberger at 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 at gmail.com <mailto:thebudget72 at
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 at r-project.org <mailto:R-help at 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 at r-project.org <mailto:R-help at 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]]