function(x) !is.na(x) & x "is_true(.)" etc. was: [R] How to index..

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

function(x) !is.na(x) & x "is_true(.)" etc. was: [R] How to index..

Martin Maechler
Diverted from R-help to R-devel,
as I've changed the focus to consider adding new functions to R :

>>>>> peter dalgaard
>>>>>     on Fri, 21 Feb 2020 10:46:16 +0100 writes:

    > It has isTRUE, but that is not vectorized, and in fact explicitly tests length==1, so
    >> isTRUE(c(TRUE,FALSE,NA))
    > [1] FALSE
    >> isTRUE(c(TRUE,TRUE, TRUE)) # I thought I thaw a puddycat... ;-)
    > [1] FALSE
    >> Vectorize(isTRUE)(c(TRUE,FALSE,NA))
    > [1]  TRUE FALSE FALSE

    > (The latter would be silly as an implementation of is_true, of course.)

    > -pd

yes... We've had (hidden) functions in the Matrix package for
these, which can still be accelerated (quite a bit for most
arguments), in Matrix/R/Auxiliaries.R (see the R-forge development version :
 https://r-forge.r-project.org/scm/viewvc.php/pkg/Matrix/R/Auxiliaries.R?view=markup&root=matrix  )


## Need to consider NAs ;  "== 0" even works for logical & complex:
## Note that "!x" is faster than "x == 0", but does not (yet!) work for complex
## if we did these in C, would gain a factor 2 (or so):
is0  <- function(x) !is.na(x) & x == 0
isN0 <- function(x)  is.na(x) | x != 0
is1  <- function(x) !is.na(x) & x   # also == "isTRUE componentwise"


{{Note that here  0 <==> FALSE   and  non-0 <==> TRUE , and I
  had preferred the shorter words to the longer ones in the
  Matrix pkg, not the least as '0' is relevant also for
  talking/programming about sparse matrices ..
}}

... and then there are  all* and any* versions of these
functions there , for which I have even written fast C based .Call()s ...

May this be something worth adding to base  for  R 4.0.0
(if only just to entice more users making the effort to switch
 to it in ca. 2 months) ?

Martin



    >> On 20 Feb 2020, at 04:20 , Lijun Zhao <[hidden email]> wrote:
    >>
    >>
    >> Some packages have the equivalent of that is_true function, which maps FALSE and NA to FALSE and TRUE to TRUE.  I don't think core R contains such a function.

    > --
    > Peter Dalgaard, Professor,
    > Center for Statistics, Copenhagen Business School
    > Solbjerg Plads 3, 2000 Frederiksberg, Denmark
    > Phone: (+45)38153501
    > Office: A 4.23
    > Email: [hidden email]  Priv: [hidden email]

    > ______________________________________________
    > [hidden email] 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.

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel