[Rd] Warning 'as.data.frame.POSIXct()' is deprecated
Martin Maechler
m@ech|er @end|ng |rom @t@t@m@th@ethz@ch
Thu Jul 6 18:13:37 CEST 2023
>>>>> 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 using 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
More information about the R-devel
mailing list