S4 class inheriting from data table: ":=" gives a confusing error message

Open
#2,555 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
5/5
Estimated time
Over a week
Newbie friendliness
35/100
Issue type
Bug
Clarity
Needs clarification
Activity status
Stale
Tech stack
r
Domain
data

Research direction

Reproduce the S4/data.table example in the issue and inspect the behavior of is.data.table, :=, and the related discussion in #1881. Determine the intended handling for S4 subclasses and define a diagnostic or behavior that correctly addresses this case; completion should include a verified result for the supplied example.

Written by the indexing model from the issue text.

Description

non-atomic column

I have an S4 class that inherits from data.table:

setClass("Foo", contains="data.table")

The Foo objects are data.tables, at least according to is.data.table:

a <- new("Foo", data.table(x=1))
is.data.table(a)
[1] TRUE
a[,y := x+1]
Error in `:=`(y, x + 1) : 
  Check that is.data.table(DT) == TRUE. Otherwise, := and `:=`(...) are defined for use in j, once only and in particular ways. See help(":=").

This issue is probably related to #1881 although the related queries are different and the error message does not suggest suggest a check that seems to be correct. I could not find anything relevant neither in NEWS nor on SO (https://stackoverflow.com/questions/46137134/how-can-data-table-can-be-inherited-by-an-object-of-a-subclass-of-data-tabl and https://stackoverflow.com/questions/32206351/how-to-use-data-table-as-super-class-in-s4 are somewhat related).

I'd be happy to take a look, but I feel the S4 side of data.table needs a bit more directions/planning before an outsider like someone jumps to coding.

Thanks,
Ott

sessionInfo:

sessionInfo()
R version 3.4.3 (2017-11-30)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 16.04.3 LTS

Matrix products: default
BLAS: /usr/lib/libblas/libblas.so.3.6.0
LAPACK: /usr/lib/lapack/liblapack.so.3.6.0

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8     LC_MONETARY=en_US.UTF-8   
 [6] LC_MESSAGES=en_US.UTF-8    LC_PAPER=en_US.UTF-8       LC_NAME=C                  LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] data.table_1.10.4 dplyr_0.7.2      

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.12     lattice_0.20-35  assertthat_0.2.0 grid_3.4.3       R6_2.2.2         magrittr_1.5     rlang_0.1.2      sp_1.2-5        
 [9] bindrcpp_0.2     rgdal_1.2-12     tools_3.4.3      glue_1.1.1       compiler_3.4.3   pkgconfig_2.0.1  bindr_0.1        tibble_1.3.3    
Dominant language
R
Stars
3.9k
Forks
1.1k
Avg merge
14h 4m
Merged PRs (30d)
4

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from Rdatatable/data.table

All issues in Rdatatable/data.table

Similar issues

More R issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.