Хотелось бы обернуть хеш-функцию, чтобы я мог вызвать hashmyCar(mtcars)
.Метод 1 позволяет мне проверить это, но в методе 2 я не могу создать необходимую переменную hash.car
.
#As per R-blog "hash me if you can" by Vonjd
assign_hash <- Vectorize(assign, vectorize.args = c("x", "value"))
get_hash <- Vectorize(get, vectorize.args = "x")
exists_hash <- Vectorize(exists, vectorize.args = "x")
Метод 1:
hash <- new.env(hash = TRUE, parent = emptyenv())
key <- rownames(mtcars)
value <- mtcars$mpg
assign_hash(key, value, hash) #setup hash variable
mget("Datsun 710", hash) #gave me 22.8, no problem
Метод 2:
hashmyCar <- function(mydf){
if("hash.car" %!in% ls(envir = emptyenv())){
hash.car <- new.env(hash = TRUE, parent = emptyenv()) #see q1
key <- rownames(mydf)
value <- mydf$mpg
assign_hash(key, value, hash.car) #setup my hash
}
}
ввод hash.car
дает Error: object 'hash.car' not found
Вопрос:
- Допускается ли
hash=True
использоваться в глобальной среде?Так что я могу переписать:
...
if("hash.car" %!in% ls(envir = .GlobalEnv))
...
#init my hash
assign_hash(key = rownames(mtcars), value = mtcars$mpg, hash)
...
#push hash into global
assign("hash.car", hash, envir = .GlobalEnv) #it seems very inefficient.