Как мне кэшировать векторизованные вызовы, которые принимают пользовательский ввод в R? - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь вычислить поле для всех строк большого набора данных. Функция для его расчета взята из пакета taxize и использует HTTP-запрос для запроса на внешнем сайте правильного идентификационного номера. Это поиск по научному названию, и часто есть несколько результатов, и в этом случае эта функция запрашивает ввод пользователя. Я хотел бы, чтобы функция кэшировала мой выбор и возвращала этот идентификационный номер каждый раз, когда с тех пор осуществляется один и тот же вызов. Я пробовал с моей собственной функцией кэширования и с memoizedCall () из пакета R.cache, но каждый раз, когда он попадает во вторую запись с тем же научным именем, он все равно запрашивает у меня ввод пользователя. Мне кажется, что я неправильно понимаю что-то базовое о том, как работает векторизация. Извините за мое невежество, но любой совет приветствуется.

Вот код, который я использовал в качестве пользовательской функции кэширования.

check_tsn <- function(data,tsn_list){
  print(data)
  print(tsn_list)
  if (is.null(tsn_list$data)){
    tsn_list$data = taxize::get_tsn(data)
    print('added to tsn_list')
  }
  return(tsn_list$data)
}
tsn_list <- vector(mode = "list", nrow(wanglang))
Genus.Species <- c('Tamiops swinhoei','Bos taurus','Tamiops swinhoei')
IUCN.ID <- c('21382','','21382')
species <- data.frame(Genus.Species,IUCN.ID)
species$TSN.ID = check_tsn(species$Genus.Species,tsn_list)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...