[R] Is there a hash data structure for R
Duncan Murdoch
murdoch@dunc@n @end|ng |rom gm@||@com
Tue Nov 2 12:54:14 CET 2021
On 02/11/2021 4:13 a.m., Yonghua Peng wrote:
> I know this is a newbie question. But how do I implement the hash structure
> which is available in other languages (in python it's dict)?
>
> I know there is the list, but list's names can be duplicated here.
As Eric said, the environment comes pretty close. One difference
between lists and environments is that environments are reference
objects, so this changes e1$x:
e1 <- new.env()
e1$x <- 1
e2 <- e1
e2$x <- 2
Lists are not reference objects, so this doesn't change l1$x:
l1 <- list()
l1$x <- 1
l2 <- l1
l2$x <- 2
I don't know which behaviour you'd feel more comfortable with.
Reference objects are pretty rare in R, so some R programmers would be
surprised by the environment behaviour. But in other languages they're
more common, so maybe newbies would be more surprised by the list behaviour.
Another difference betwee environments and lists is how they handle
assignments of NULL:
e1$y <- NULL # sets e1$y to NULL
l1$y <- NULL # does nothing here, would delete l1$y if it existed
I don't like the NULL handling in lists in R, but I'm used to it.
BTW, I don't understand why the possibility of duplicated names is an
issue. If you just avoid intentional duplication, you don't get it.
For example, if instead of this:
>
>> x <- list(x=1:5,y=month.name,x=3:7)
you do this:
x <- list(x=1:5,y=month.name)
x$x <- 3:7
there is no duplication. The only (?) ways to get duplication are in
the initial construction of the list, or by explicit manipulation of the
names attribute. So be careful when you do those, and lists can work.
Duncan Murdoch
>
>> x
>
> $x
>
> [1] 1 2 3 4 5
>
>
> $y
>
> [1] "January" "February" "March" "April" "May" "June"
>
> [7] "July" "August" "September" "October" "November" "December"
>
>
> $x
>
> [1] 3 4 5 6 7
>
>
>
> Thanks a lot.
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
More information about the R-help
mailing list