hi all, I am trying to use named list to hash a bunch of vector by name, for instance: test = list() test$name = c(1,2,3) the problem is that when i try to get the values back by using the name, the matching isn't done in an exact way, so test$na is not NULL. is there a way around this? Why by default all.equal.list doesnt require an exact match? How can I do hashing in R? thanks. ulas.
hashing using named lists
5 messages · ulas karaoz, Roger D. Peng, Brian Ripley +2 more
You could try using environments: > e <- new.env(hash = TRUE) > e$new <- 1:4 > ls(e) [1] "new" > e$new [1] 1 2 3 4 > e$ne NULL -roger
ulas karaoz wrote:
hi all, I am trying to use named list to hash a bunch of vector by name, for instance: test = list() test$name = c(1,2,3) the problem is that when i try to get the values back by using the name, the matching isn't done in an exact way, so test$na is not NULL. is there a way around this? Why by default all.equal.list doesnt require an exact match? How can I do hashing in R? thanks. ulas.
______________________________________________ R-help at stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
Roger D. Peng http://www.biostat.jhsph.edu/~rpeng/
On Thu, 18 Nov 2004, ulas karaoz wrote:
hi all, I am trying to use named list to hash a bunch of vector by name, for instance: test = list() test$name = c(1,2,3) the problem is that when i try to get the values back by using the name, the matching isn't done in an exact way, so test$na is not NULL. is there a way around this?
?match on the names
Why by default all.equal.list doesnt require an exact match?
What do you mean by that? It (by default or not) tests all the attributes, including the names: test <- list(name=1:3) test2 <- list(na=1:3) all.equal(test, test2) [1] "Names: 1 string mismatches" Now, all.equal does not require an exact match, deliberately: that is what identical() is for: identical(test, test2) [1] FALSE
How can I do hashing in R?
?match
Brian D. Ripley, ripley at stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595
ulas karaoz wrote:
is there a way around this?
yes...
Why by default all.equal.list doesnt require an exact match?
because we're lazy? :)
How can I do hashing in R?
you can explicitly test the names for equality, eg with this 2-element list: > x $name [1] 1 2 3 $n [1] 3 2 1 You can do: > x[names(x)=='name'] $name [1] 1 2 3 > x[names(x)=='na'] list() > x[names(x)=='n'] $n [1] 3 2 1 Of course, the right way would be to create a new class, 'hash' perhaps, that did all this in its '$' or '[' methods. Baz
Use match() for exact matching,
i.e.,
> test[[match("name", names(test))]]
Yes, it is more cumbersome. This partial matching is considered by some to
be a design fault, but changing it would break too many programs that
depend upon it.
I don't understand your question about all.equal.list() -- it does seem to
require exact matches on names, e.g.:
> all.equal(list(a=1:3), list(aa=1:3))
[1] "Names: 1 string mismatches"
> all.equal(list(aa=1:3), list(a=1:3))
[1] "Names: 1 string mismatches"
>
(the above run in R 2.0.0)
-- Tony Plate
(BTW, in R this operation is generally called "indexing" or "subscripting"
or "extraction", but not "hashing". "Hashing" is a specific technique for
managing and looking up indices, which is why some other programming
languages refer to list-like objects that are indexed by character strings
as "hashes". I don't think hashing is used for list names in R, but
someone please correct me if I'm wrong! )
At Thursday 09:29 AM 11/18/2004, ulas karaoz wrote:
hi all, I am trying to use named list to hash a bunch of vector by name, for instance: test = list() test$name = c(1,2,3) the problem is that when i try to get the values back by using the name, the matching isn't done in an exact way, so test$na is not NULL. is there a way around this? Why by default all.equal.list doesnt require an exact match? How can I do hashing in R? thanks. ulas.
______________________________________________ R-help at stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html