R6DS stands for R6 class based Data Structures. The package provides reference classes implementing some useful data stuctures. They are:
For an introduction of the package, please read the online vignette
Introduction to the R6DS Package
You can either install the stable version from CRAN
install.packages("R6DS")
or install the development version from GitHub
::install_github("yukai-yang/R6DS") devtools
provided that the package “devtools” has been installed beforehand.
After installing the package, you need to load (attach better say) it by running the code
library(R6DS)
You can first check the information and the current version number by running
version()
#> R6DS version 1.2.0 (Red DS)
Then you can take a look at all the available functions and data in the package
ls( grep("R6DS", search()) )
#> [1] "RBST" "RDeque" "RDict" "RDLL" "RQueue" "RSet" "RStack"
#> [8] "version"
Now you can dive deeply into the package by reading the manual
?R6DS
Enjoy!
It is quite straightforward to create a new instance of the class in
the package. What you can do, for example, is to use the
new
function
<- RStack$new() rstack
and an empty stack (rstack
) will be initialized.
You can push elements into it.
$push(1, 2, 3) rstack
and even heterogeneous elements
$push("Hello world!", list(key=1, val=2), RQueue$new()) rstack
Notice that, the last pushed element is an instance of the class
RQueue
in the package.
Remember that, in R, only the assignment or pass of an instance of
some reference class is pass-by-reference! In the following sentence,
rstack
pops the last stacked element (return and remove its
handle in rstack
) and assign it by-reference to
rqueue
<- rstack$pop() rqueue
And the following assignments are pass-by-value (a copy).
<- rstack$pop()
rlist <- rstack$pop() rstring
The difference between the two assignments are:
rqueue
takes over the same memory space with the
used-to-be-the-last (but not ever since the pop) element in
rstack
, and R did not allocate memory space when creating
rqueue
.rlist
and rstring
are variables with newly
allocated memory spaces. As for the list and string elements in
rstack
, they have been removed completely.So the conclusion is that, whether it is a pass-by-value or by-reference depends on the object to be passed, not anything else.