From m@ech|er @end|ng |rom @t@t@m@th@ethz@ch  Thu Jul  6 18:13:37 2023
From: m@ech|er @end|ng |rom @t@t@m@th@ethz@ch (Martin Maechler)
Date: Thu, 6 Jul 2023 18:13:37 +0200
Subject: [Rd] Warning 'as.data.frame.POSIXct()' is deprecated
In-Reply-To: <4d7bc097-0ea9-96b2-81ea-36203a7f7310@hiddenelephants.co.uk>
References: <CALnEB16CAR28kTtkvVcEOQj3Tmyc_rwCjckwexnQsA3_ZkFPCg@mail.gmail.com>
 <1e8bc3aa-1614-3cd4-f0db-01735c152e7f@hiddenelephants.co.uk>
 <15178f56-0d28-e7fa-000f-959c00dd63ca@hiddenelephants.co.uk>
 <CALnEB17VsNZC5U_usC+qxXgx4ngZFwGpO2W_Tg8L6WQ9rm83Qg@mail.gmail.com>
 <87wmzdcg23.fsf@aldus>
 <4d7bc097-0ea9-96b2-81ea-36203a7f7310@hiddenelephants.co.uk>
Message-ID: <25766.59441.59514.211464@stat.math.ethz.ch>

>>>>> Tim Taylor 
>>>>>     on Thu, 6 Jul 2023 15:11:41 +0100 writes:

    > Ah yes ... and reading the as.data.frame help we see (emphasis mine):
    > "... Direct calls to as.data.frame.<class>() are still possible (*base 
    > package!*), for 12 atomic base classes, but will deprecated ..."

    > So it does seem that a lot of these warnings are triggered by base R and 
    > updating this code may be a work in progress.


    > A little tangential (but related) to this though is still the fact that 
    > we can trigger the warning with:

    > lapply(Sys.Date(), as.data.frame)

    > so I wonder if the code in base/R/zzz.R 
    > (https://github.com/wch/r-source/blob/9f1940663f902174034a01197e55fd17c767213a/src/library/base/R/zzz.R#L664-L686) 
    > does need tweaking?

Yes, thank you, Tim for your analysis.
I've started looking at the issue a couple of hours ago,
{notably as I am the originator of the issue ...}

    > At this stage this is probably more a question for R-devel though.

    > Tim

(( not only at this stage. This would have belonged there from the
   start.... but nothing is perfect....
   ==> This reply now *GOES* to R-devel ))


Yes, this a buglet / imperfection in the deprecation warnings.
I have spent already time to fix the  lapply() case {and similar} cases.
In the mean time there *is* also a very related message on
R-devel by Mikael Jagan.

As the plan was that this is only "ad interim", namely
before those explicit  as.data.frame.<something> methods will be
completely gone from base -- because they are all currently
identical(*) to as.data.frame.vector(),
I did add that hack in zzz.R  to create deprecation warnings
that should be correct most of the time - unless people do funny things.
--
*) apart from the fact that 12 method functions all got their deprec.warning.


    > On 06/07/2023 14:42, Enrico Schumann wrote:
    >> On Thu, 06 Jul 2023, Vincent van Hees writes:
    >> 
    >>> Thanks, in that case the REPLEX for the issue may need to be:
    >>> 
    >>>> remember = Sys.getenv("_R_CHECK_AS_DATA_FRAME_EXPLICIT_METHOD_")
    >>>> Sys.setenv("_R_CHECK_AS_DATA_FRAME_EXPLICIT_METHOD_" = TRUE)
    >>>> data.frame(time = Sys.time())
    >>> time
    >>> 1 2023-07-06 14:29:37
    >>>> data.frame(time = as.POSIXlt(Sys.time()))
    >>> time
    >>> 1 2023-07-06 14:29:37
    >>> Warning message:
    >>> Direct call of 'as.data.frame.POSIXct()' is deprecated.  Use
    >>> 'as.data.frame.vector()' or 'as.data.frame()' instead
    >>>> Sys.setenv("_R_CHECK_AS_DATA_FRAME_EXPLICIT_METHOD_" = remember)
    >> 
    >> I think it happens because
    >> 
    >> data.frame(<POSIXlt>)
    >> 
    >> calls 'as.data.frame.POSIXlt' (per its S3-class), which
    >> in turn directly calls 'as.data.frame.POSIXct':
    >> 
    >> ## as.data.frame.POSIXlt
    >> function (x, row.names = NULL, optional = FALSE, ...)
    >> {
    >> value <- as.data.frame.POSIXct(as.POSIXct(x), row.names,
    >> optional, ...)
    >> if (!optional)
    >> names(value) <- deparse1(substitute(x))
    >> value
    >> }
    >> <environment: namespace:base>
    >> 
    >> Kind regards
    >> Enrico

Indeed, thank you, Enrico!

That's another such case, that my "hack" (see above) overlooked;
somewhat embarrassingly, but also astonishingly to me as I hoped
to find relevant cases by warnings appearing within the base R
checks...  {and it is I think even easier to fix than the
lapply(.)  case..}.

Martin


Martin Maechler
ETH Zurich  and  R Core team


    >>> Vincent
    >>> 
    >>> On Thu, 6 Jul 2023 at 10:41, Tim Taylor <tim.taylor at hiddenelephants.co.uk>
    >>> wrote:
    >>> 
    >>>> Apologies - I've not had enough caffeine just yet. The reprex below
    >>>> highlights the issue but I think the code which implemented the change
    >>>> *may* need tweaking not lapply.
    >>>> 
    >>>> Tim
    >>>> 
    >>>> On 06/07/2023 09:26, Tim Taylor wrote:
    >>>>> This *may* be an issue in lapply.  Let's see what others day. Reprex
    >>>>> below
    >>>>> 
    >>>>> Sys.setenv("_R_CHECK_AS_DATA_FRAME_EXPLICIT_METHOD_" = TRUE)
    >>>>> dat <- Sys.Date()
    >>>>> as.data.frame(dat)
    >>>>> #>          dat
    >>>>> #> 1 2023-07-06
    >>>>> lapply(dat, as.data.frame)
    >>>>> #> Warning: Direct call of 'as.data.frame.Date()' is deprecated.  Use
    >>>>> #> 'as.data.frame.vector()' or 'as.data.frame()' instead
    >>>>> #> [[1]]
    >>>>> #>       X[[i]]
    >>>>> #> 1 2023-07-06
    >>>>> 
    >>>>> Tim
    >>>>> 
    >>>>> On 06/07/2023 08:54, Vincent van Hees wrote:
>>>>> Dear all,
    >>>>>> 
>>>>> I see the following warning in my package test results:
    >>>>>> 
>>>>> ```
>>>>> Warning
>>>>> Direct call of 'as.data.frame.POSIXct()' is deprecated.  Use
>>>>> 'as.data.frame.vector()' or 'as.data.frame()' instead
>>>>> ```
    >>>>>> 
>>>>> The warning is not always there and I struggle to make it
>>>>> reproducible. I
>>>>> have encountered it in both Ubuntu 22.04 and in Windows 11, in both R
>>>>> 4.3.0
>>>>> and 4.3.1, in both RStudio and in an GitHub Actions environment (example
>>>>> <https://github.com/wadpac/GGIR/actions/runs/5463862340/jobs/9945096566>).
>>>>> The warning gives the impression that I am doing something that R no
>>>>> longer
>>>>> supports. However, I am not using the command as.data.frame.POSIXct()
>>>>> anywhere directly in my code.
    >>>>>> 
>>>>> When I dive into the code where the warnings occur I see patterns like:
    >>>>>> 
>>>>> ```
>>>>> now = Sys.time()
>>>>> df = data.frame (time = seq(now, now + 10, by =1),  B  = 1:11)
>>>>> ```
    >>>>>> 
>>>>> (this is a simplification of for example:
    >>>>>> 
    >>>> https://github.com/wadpac/GGIR/blob/master/tests/testthat/test_read.myacc.csv.R
>>>>> )
    >>>>>> 
>>>>> Does this mean I am discouraged from putting a vector with POSIXct
>>>>> values
>>>>> in a data.frame?
>>>>> If yes, what would be the recommended work around?
    >>>>>> 
>>>>> I have been trying to find documentation or online discussions about
>>>>> this
>>>>> warning but no luck so far. I see R NEWS
>>>>> <https://cran.r-project.org/doc/manuals/r-release/NEWS.html> mentions
>>>>> updates to POSIXct related objects several times in the past year but
>>>>> those
>>>>> seem to be different issues.

>>>>> Best,
>>>>> Vincent



[Rd] Warning 'as.data.frame.POSIXct()' is deprecated
Martin Maechler