Martin Maechler
2023-Jul-06 16:13 UTC
[Rd] Warning 'as.data.frame.POSIXct()' is deprecated
>>>>> 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
Apparently Analagous Threads
- logic tweak needed for as.data.frame.<class> deprecation warning
- retaining "POSIXct" formatting when using apply(muff, FUN=MAX) on POSIXct dataframe?
- Odd behaviour of as.POSIXct
- Problem with as.POSIXct()
- lubridate, as.POSIXct and a vector of times: bug or feature??