Использование библиотеки {hash} здесь бесполезно.Действительно, поскольку вы перефразируете свой вектор перед каждым поднабором, это будет существенно менее эффективным , чем прямой поиск.
Даже если вы создали хэш-таблицу только один раз, а не повторно, это, вероятно, все же будьте быстрее его не использовать: реализация хэш-таблицы несет существенные постоянные издержки.Это только быстрее, чем прямое подмножество векторов или списков для довольно больших таблиц.
Вместо этого просто сделайте это:
sym2num <- function(x) {
c(f = 1E-15, p = 1E-12, n = 1E-9, mu = 1E-6, m = 1E-3, c = 1E-2)[x]
}
Это идиоматический, эффективный код R.
По сути, ошибка в вашем коде R была поднабором h$x
.Это терпит неудачу, потому что оператор подмножества $
не работает с переменными, он ожидает неоцененное имя в правой части.Таким образом, код всегда будет искать буквальное имя x
внутри h
.Ответ thc показывает, как избежать проблемы.