создание хеша в методе вызова функции - PullRequest
0 голосов
/ 20 сентября 2019

Хотелось бы обернуть хеш-функцию, чтобы я мог вызвать 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

Вопрос:

  1. Допускается ли 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...