In base R, object attributes are lost when objects are modified by common data operations such as subset, filter, slice, append, extract etc. This packages allows objects to be marked as 'sticky' and have attributes persisted during these operations or when inserted into or extracted from list-like or table-like objects.
In base R, objects lose attributes in many common operations. Marking objects 'sticky', make attributes resilent to these operations: subset, [, [[<-, append, etc. or when inserted into or extracted from list-like objects such as data frames or data tables.
Basically, sticky make object attributes behave much more like attributes in other programming languages. There isn't much to the package. sticky/unstickand sticky_all are the only interfaces to the package.
sticky: make an objects attributes persist across data operations
unstick: remove the stickiness of an object; attributes will no longer
persist during common data opetations
sticky_all : make all elements of a recursive object sticky.
Here is an simple example of a sticky attribute in action. Under base R,
attributes do not survive a slice/subset/[ operation:
x <- 1:5
attr(x, 'foo') <- 'bar'
attr(x[1:3],'foo') # NULL -- attribute removed
To ensure that they get preserved, simply declare the object as sticky:
x <- sticky(x)
attr(x[1:3],'foo') # 'bar' -- attribute preserved
sticky() works for vectors inside table-like objects ( i.e. data.frames
and data.tables), preserving their attributes during table operations.
df <- data.frame(
sticky = sticky( structure(1:5, foo="bar") ),
nonstick = structure( letters[1:5], foo="bar" )
)
attr( df[2:3,"nonstick"], 'foo' ) # NULL
attr( df[2:3,"sticky"], 'foo' ) # bar
sticky_all will make all members of a recursive object sticky.
install.packages('sticky')
libraty(devtools)
lnstall_github('decisionpatterns/sticky')
There are a number of things that can be done with sticky:
The issue of attribute resilence has been often asked and debated. Here are a few of the most prevalent discussions.
mostattributes for matrices to propogate to result of extract1.First Accepted CRAN release