Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fcase doesn't recognize S4 object : lubridate example #4131

Open
torema-ed opened this issue Dec 19, 2019 · 5 comments
Open

fcase doesn't recognize S4 object : lubridate example #4131

torema-ed opened this issue Dec 19, 2019 · 5 comments
Labels
feature request non-atomic column e.g. list columns, S4 vector columns

Comments

@torema-ed
Copy link

Thank you all for the hard work in creating fcase. I have tried it out on a project that I'm currently working on and encountered problems when it was used together with lubridate period creation functions. It seems to recognize lubridate::weeks, lubridate::months, lubridate::years as lubridate::days.

reprex:

# Loading packages --------------------------------------------------------

library(data.table)
library(lubridate)
#> 
#> Attaching package: 'lubridate'
#> The following objects are masked from 'package:data.table':
#> 
#>     hour, isoweek, mday, minute, month, quarter, second, wday, week,
#>     yday, year
#> The following object is masked from 'package:base':
#> 
#>     date
library(lest)

# Creating test data ------------------------------------------------------

dt <- data.table(period_unit = c("days", "months", "weeks", "years"),
                 period_length = rep(1, times = 4))

# fcase output ------------------------------------------------------------

dt[, period := fcase(period_unit == "days", days(period_length),
                     period_unit == "months", months(period_length),
                     period_unit == "weeks", weeks(period_length),
                     period_unit == "years", years(period_length))][]
#>    period_unit period_length      period
#> 1:        days             1 1d 0H 0M 0S
#> 2:      months             1 1d 0H 0M 0S
#> 3:       weeks             1 1d 0H 0M 0S
#> 4:       years             1 1d 0H 0M 0S

# case_when output --------------------------------------------------------

dt[, period := case_when(period_unit == "days" ~ days(period_length),
                         period_unit == "months" ~ months(period_length),
                         period_unit == "weeks" ~ weeks(period_length),
                         period_unit == "years" ~ years(period_length))][]
#>    period_unit period_length            period
#> 1:        days             1       1d 0H 0M 0S
#> 2:      months             1    1m 0d 0H 0M 0S
#> 3:       weeks             1       7d 0H 0M 0S
#> 4:       years             1 1y 0m 0d 0H 0M 0S

Created on 2019-12-19 by the reprex package (v0.3.0)

Session info
devtools::session_info()
#> ─ Session info ───────────────────────────────────────────────────────────────
#>  setting  value                       
#>  version  R version 3.6.2 (2019-12-12)
#>  os       Linux Mint 18.3             
#>  system   x86_64, linux-gnu           
#>  ui       X11                         
#>  language en_SG:en                    
#>  collate  en_SG.UTF-8                 
#>  ctype    en_SG.UTF-8                 
#>  tz       Asia/Singapore              
#>  date     2019-12-19                  
#> 
#> ─ Packages ───────────────────────────────────────────────────────────────────
#>  package     * version date       lib source        
#>  assertthat    0.2.1   2019-03-21 [1] CRAN (R 3.6.1)
#>  backports     1.1.5   2019-10-02 [1] CRAN (R 3.6.1)
#>  callr         3.4.0   2019-12-09 [1] CRAN (R 3.6.1)
#>  cli           2.0.0   2019-12-09 [1] CRAN (R 3.6.1)
#>  crayon        1.3.4   2017-09-16 [1] CRAN (R 3.6.1)
#>  data.table  * 1.12.9  2019-12-19 [1] local         
#>  desc          1.2.0   2018-05-01 [1] CRAN (R 3.6.1)
#>  devtools      2.2.1   2019-09-24 [1] CRAN (R 3.6.1)
#>  digest        0.6.23  2019-11-23 [1] CRAN (R 3.6.1)
#>  ellipsis      0.3.0   2019-09-20 [1] CRAN (R 3.6.1)
#>  evaluate      0.14    2019-05-28 [1] CRAN (R 3.6.1)
#>  fansi         0.4.0   2018-10-05 [1] CRAN (R 3.6.1)
#>  fs            1.3.1   2019-05-06 [1] CRAN (R 3.6.1)
#>  glue          1.3.1   2019-03-12 [1] CRAN (R 3.6.1)
#>  highr         0.8     2019-03-20 [1] CRAN (R 3.6.1)
#>  htmltools     0.4.0   2019-10-04 [1] CRAN (R 3.6.1)
#>  knitr         1.26    2019-11-12 [1] CRAN (R 3.6.1)
#>  lest        * 1.1.0   2019-11-29 [1] CRAN (R 3.6.1)
#>  lubridate   * 1.7.4   2018-04-11 [1] CRAN (R 3.6.1)
#>  magrittr      1.5     2014-11-22 [1] CRAN (R 3.6.1)
#>  memoise       1.1.0   2017-04-21 [1] CRAN (R 3.6.1)
#>  pkgbuild      1.0.6   2019-10-09 [1] CRAN (R 3.6.1)
#>  pkgload       1.0.2   2018-10-29 [1] CRAN (R 3.6.1)
#>  prettyunits   1.0.2   2015-07-13 [1] CRAN (R 3.6.1)
#>  processx      3.4.1   2019-07-18 [1] CRAN (R 3.6.1)
#>  ps            1.3.0   2018-12-21 [1] CRAN (R 3.6.1)
#>  R6            2.4.1   2019-11-12 [1] CRAN (R 3.6.1)
#>  Rcpp          1.0.3   2019-11-08 [3] CRAN (R 3.6.1)
#>  remotes       2.1.0   2019-06-24 [1] CRAN (R 3.6.1)
#>  rlang         0.4.2   2019-11-23 [1] CRAN (R 3.6.1)
#>  rmarkdown     2.0     2019-12-12 [1] CRAN (R 3.6.1)
#>  rprojroot     1.3-2   2018-01-03 [1] CRAN (R 3.6.1)
#>  sessioninfo   1.1.1   2018-11-05 [1] CRAN (R 3.6.1)
#>  stringi       1.4.3   2019-03-12 [1] CRAN (R 3.6.1)
#>  stringr       1.4.0   2019-02-10 [1] CRAN (R 3.6.1)
#>  testthat      2.3.1   2019-12-01 [1] CRAN (R 3.6.1)
#>  usethis       1.5.1   2019-07-04 [1] CRAN (R 3.6.1)
#>  withr         2.1.2   2018-03-15 [1] CRAN (R 3.6.1)
#>  xfun          0.11    2019-11-12 [1] CRAN (R 3.6.1)
#>  yaml          2.2.0   2018-07-25 [1] CRAN (R 3.6.1)
#> 
#> [1] /home/edt/R/3.6/library
#> [2] /usr/local/lib/R/site-library
#> [3] /usr/lib/R/site-library
#> [4] /usr/lib/R/library
@2005m
Copy link
Contributor

2005m commented Dec 19, 2019

I am not sure but I think I see where the issue is coming from. We only take into account the attributes of the first argument. We actually have the same problem with fifelse and fcoalesce. I think we need to manage S4 object at C levels.

@2005m
Copy link
Contributor

2005m commented Dec 21, 2019

@torema-ed , thank you very much for reporting this. I will raise it as a feature request. In the meantime I think that we should notify the user (at least for fifelse and fcase) that S4 object are not supported. I will hence raise an issue for that.

@2005m 2005m changed the title fcase doesn't seem to recognize lubridate's period creation functions fcase doesn't recognize S4 object : lubridate example Dec 21, 2019
@2005m
Copy link
Contributor

2005m commented Jan 8, 2020

@torema-ed , now that #4135 has been closed you should have an error message in your example.

@torema-ed
Copy link
Author

@2005m Great, thank you!

I'll leave the decision of closing this issue to you as I'm not too sure if you want to keep it open for future reference.

@2005m
Copy link
Contributor

2005m commented Jan 12, 2020

Thank you @torema-ed , I would leave it open for now in case there are other S4 objects for which fcase is not working. I am also curious to know if there is a real demand for it. Depending on the Rdatatable team we might want to support lubridate in the future or not...it is opened to discussion...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature request non-atomic column e.g. list columns, S4 vector columns
Projects
None yet
Development

No branches or pull requests

3 participants