[R-pkg-devel] Lists vs Attributes

Duncan Murdoch murdoch@dunc@n @end|ng |rom gm@||@com
Sat Oct 2 02:30:56 CEST 2021


On 01/10/2021 6:14 p.m., Reed A. Cartwright wrote:
> I'm rethinking the interface of a package, specifically how external binary
> data is formatted for use in R. I can't decide if it is better to use
> attributes to store metadata or use a list to hold the main data and
> metadata as separate elements.

Is the object like some other common R object?  You say it's a 16x16x16 
array of integers.  Is there an advantage to treating it *exactly* like 
that, so x[1,2,3] gives an integer?  Then put the other stuff in attributes.

Is it weird enough that x[1,2,3] *needs* to look at the other attributes 
to know what to return?  Does it never make sense to do regular 
operations on the object, as though it really was 16x16x16 array of 
integers?  Then make it a list of different components, and spend the 
time to define methods to handle any operations that do make sense.

Both approaches are possible; you want to choose the one that is 
easiest, and most maintainable.

Duncan Murdoch

> 
> Here's is what one datatype currently looks like:
> 
> List of 2
>   $ : int [1:16, 1:16, 1:16] 9 9 9 9 10 10 1 1 14 14 ...
>    ..- attr(*, "palette")=List of 16
>   [snip]
>   $ : int [1:16, 1:16, 1:16] 1 1 1 1 1 1 1 1 1 1 ...
>    ..- attr(*, "palette")=List of 2
>   [snip]
>    - attr(*, "offset")= int 3
> 
> It's a list of two 16x16x16 arrays of integers. Each array has its own
> "palette" attribute. Each value in the array refers to a specific element
> of the palette. In addition the entire list has an offset attribute.
> 
> I am considering alternative strategies for representing this data, and I
> would like any opinions on which style is recommended and why?
> 
> List of 3
>   $ index  :List of 2
>    ..$ : int [1:16, 1:16, 1:16] 9 9 9 9 10 10 1 1 14 14 ...
>    ..$ : int [1:16, 1:16, 1:16] 1 1 1 1 1 1 1 1 1 1 ...
>   $ palette:List of 2
>    ..$ :List of 16
>    ..$ :LIST of 2
>   $ offset : int 3
> 
> or
> 
> List of 2
>   $ :List of 2
>    ..$ index: int [1:16, 1:16, 1:16] 9 9 9 9 10 10 1 1 14 14 ...
>    ..$ palette:List of 16
>   $ : List of 2
>   ..$ index : int [1:16, 1:16, 1:16] 1 1 1 1 1 1 1 1 1 1 ...
>   ..$ palette : List of 2
>   - attr(*, "offset")= int 3
> 
> Thanks.
> 
> 	[[alternative HTML version deleted]]
> 
> ______________________________________________
> R-package-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-package-devel
>



More information about the R-package-devel mailing list