From m@ech|er @end|ng |rom @t@t@m@th@ethz@ch  Fri Jul  7 18:46:34 2023
From: m@ech|er @end|ng |rom @t@t@m@th@ethz@ch (Martin Maechler)
Date: Fri, 7 Jul 2023 18:46:34 +0200
Subject: [Rd] logic tweak needed for as.data.frame.<class> deprecation
 warning
In-Reply-To: <730ed025-b919-6d76-4263-6462d37f40e8@gmail.com>
References: <730ed025-b919-6d76-4263-6462d37f40e8@gmail.com>
Message-ID: <25768.16746.938255.645014@stat.math.ethz.ch>

>>>>> Mikael Jagan 
>>>>>     on Thu, 6 Jul 2023 11:32:00 -0400 writes:

    > Continuing the thread started on R-package-devel, here:
    > https://stat.ethz.ch/pipermail/r-package-devel/2023q3/009307.html

    > The logic of the now soft-deprecated as.data.frame.<class>,

    >> body(as.data.frame.integer)[[2L]]
    > if ((sys.nframe() <= 1L || sys.call(-1L)[[1L]] != quote(as.data.frame)) &&
    > nzchar(Sys.getenv("_R_CHECK_AS_DATA_FRAME_EXPLICIT_METHOD_"))) 
    > .Deprecated(msg = gettextf("Direct call of '%s()' is deprecated.  Use '%s()' or 
    > '%s()' instead",
    > "as.data.frame.integer", "as.data.frame.vector", "as.data.frame"))

    > may need adjustment to avoid false positives such as this one:

    >> Sys.setenv("_R_CHECK_AS_DATA_FRAME_EXPLICIT_METHOD_" = TRUE)
    >> f <- as.data.frame
    >> f(0L)
    > 0L
    > 1  0
    > Warning message:
    > Direct call of 'as.data.frame.integer()' is deprecated.  Use 
    > 'as.data.frame.vector()' or 'as.data.frame()' instead

    > i.e., the condition sys.call(-1L)[[1L]] != quote(as.data.frame) is not precise
    > enough ... would !identical(sys.function(-1L), as.data.frame) work instead?


    > Mikael


Thank you, Mikael!

Indeed, as I see that it seems not even more costly than using sys.call(),
*and* because you gave me a case, where the previous, even
updated code, even lead to an error:

  > mapply(as.data.frame, x=1:10, row.names=letters[1:10])
  Error in (c1 <- sys.call(-1L)[[1L]]) != quote(as.data.frame) :
      comparison (!=) is possible only for atomic and list types

I have amended the code, using sys.function(-1L) in the first check
which does fix the above error and catches more false positives.

This is now in  R-devel svn rev >=  84653
and is planned to eventually be ported to the R 4.3.x series,
i.e., currently "R 4.3.1 patched".

Martin



[Rd] logic tweak needed for as.data.frame.<class> deprecation warning
Martin Maechler