The goal of this document is to compare the performances of some of the existing packages.

  • dequer 2.0-2implements double ended queues and it supports arbitrary R objects. However, it uses R_PreserveObject and R_ReleaseObject heavily which could be an issue for long queues.
  • datastructures 0.2.9 uses ‘Boost’ and ‘STL’ data types to implement queues and hashmaps. For some reasons, it is often slow as shown in the benchmark.
  • liqueueR 0.0.1 implements queues in pure R code which explains its slowness.
  • hash 2.2.6.2 uses R environments to create hash tables. It is known that regular R enviroments leak memory.
  • fastmap 1.1.0. The current implementation of collection::dict is actually inspired by it. However, a more efficient hash table library tommy is used.
  • hashtab of R 4.2.
  • We also compare to serveral base R implementations based on lists or environments, see here for details.

Queue

Stack

Deque

Priority Queue

Dictionary

Note that base::new.env suffers from memory leak issue. The performance gap between R environments and collections::dict is mainly attributed to the overhead in accessing the $get and $set methods from the dict object.

Ordered dict

Note that ordered_dict grows linearly in n but but list does not.