Как получить доступ к фактической хэш-таблице поиска внутренних факторов в R

Уважаемое сообщество Stackru,

Я искал везде, но не могу найти ответ на этот вопрос. Я пытаюсь получить доступ к таблице поиска факторов, которую R использует, когда вы изменяете вектор строки на вектор факторов. Я не пытаюсь преобразовать строку в фактор, а хочу получить справочную таблицу, лежащую в основе переменной фактора, и сохранить ее как хеш-таблицу для использования в другом месте.

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

у меня есть список наборов элементов, которые я хочу преобразовать в числовые, но каждый набор в списке имеет разное количество элементов.

Пока что я преобразовал список векторов в вектор

vec <- unlist(list)
vec <- factor(vec)

Теперь я хочу выполнить поиск в исходном списке с помощью таблицы поиска факторов, которая должна лежать в основе vec, но я не могу найти ее.

1 ответ

Решение

Я думаю, что вы либо хотите индексы, которые отображают элементы фактора на элементы уровней фактора, как в:

vec <- c('a','b','c','b','a')
f <- factor(vec)
f
#> [1] a b c b a
#> Levels: a b c

indx <- (f)
attributes(indx) <- NULL
indx
#> [1] 1 2 3 2 1

или вы хотите, чтобы хеш-таблицы использовались внутренне для создания факторной переменной. К сожалению, любые хеш-таблицы, созданные в процессе создания фактора, будут созданы функциями unique а также match которые являются внутренними функциями, поэтому у вас не будет доступа ни к чему, создаваемому этими функциями (конечно, кроме возвращаемого значения). Если вам нужна хеш-таблица, чтобы вы могли использовать ее для индексирования вектора символов с теми же уровнями, что и у существующего фактора, просто создайте хеш-таблицу, как показано в:

library(hash)
.levels <- levels(f)
h <- hash(keys = .levels,values = seq_along(.levels))
newVec <- sample(.levels,10,replace=T)
newVec
#> [1] "a" "b" "a" "a" "a" "c" "c" "b" "c" "a"
values(h,keys = newVec)
#> a b a a a c c b c a 
#> 1 2 1 1 1 3 3 2 3 1 
Другие вопросы по тегам