Я пытаюсь вычислить поле для всех строк большого набора данных. Функция для его расчета взята из пакета 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)