如何在R中访问实际的内部因子查找哈希表

如何在R中访问实际的内部因子查找哈希表,r,hashtable,r-factor,R,Hashtable,R Factor,亲爱的社区: 我到处找了,但找不到这个问题的答案。我试图访问R在将字符串向量更改为因子向量时使用的因子查找表。我并没有试图将字符串转换为factor,而是获取factor变量下面的查找表,并将其存储为哈希表,以便在其他地方使用 我遇到了这个问题,因为我想在不同长度向量的列表上使用这个因子查找表,将它们从字符串转换为数字 i、 例如,我有一个要转换为数字的项目集列表,但列表中的每个项目集都有不同的项目数 到目前为止,我已经将向量列表转换为向量 vec <- unlist(list) vec

亲爱的社区:

我到处找了,但找不到这个问题的答案。我试图访问R在将字符串向量更改为因子向量时使用的因子查找表。我并没有试图将字符串转换为factor,而是获取factor变量下面的查找表,并将其存储为哈希表,以便在其他地方使用

我遇到了这个问题,因为我想在不同长度向量的列表上使用这个因子查找表,将它们从字符串转换为数字

i、 例如,我有一个要转换为数字的项目集列表,但列表中的每个项目集都有不同的项目数

到目前为止,我已经将向量列表转换为向量

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

vec我认为您需要将因子元素映射到因子级别元素的索引,如:

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

我认为您需要将因子元素映射到因子级别元素的索引,如:

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

我不清楚你在问什么。A当然会有帮助。你只是在问,对于给定的因子水平,如何从基础数字索引到字符标签?系数的
级别()
决定数值赋值。第一个级别分配为1,第二个级别分配为2,以此类推。因子向量的“因子查找表”由
levels(fac.vec)
@MrFlick返回。我想要的是Jthorpe在底部写的东西,基本上我知道,如果我做一个向量,比如:vec++这个问题很好,现在已经澄清了。杰索普的回答很好。我不清楚你在问什么。A当然会有帮助。你只是在问,对于给定的因子水平,如何从基础数字索引到字符标签?系数的
级别()
决定数值赋值。第一个级别分配为1,第二个级别分配为2,以此类推。因子向量的“因子查找表”由
levels(fac.vec)
@MrFlick返回。我想要的是Jthorpe在底部写的东西,基本上我知道,如果我做一个向量,比如:vec++这个问题很好,现在已经澄清了。Jthorpe的答案很好。谢谢Jthorpe,这个例子解决了我的问题。是的,我想我的问题是,您是否可以返回用于生成因子的内部哈希表,并在其他地方使用它,但这非常有效。值得注意的是,在R中可能有一种比手动创建哈希表进行查找更好的方法。有意义的R函数可以动态创建哈希查找表。如果您正确地将操作矢量化(而不是在循环中调用它们,需要反复创建查找表),这将非常有效。
hash
非常简洁。我在看
bit64
,但这太过分了。尽管
hash()
似乎与
new.env(hash=TRUE)的作用几乎相同
感谢Jthorpe,但该示例解决了我的问题。是的,我想我的问题是,您是否可以返回用于生成因子的内部哈希表,并在其他地方使用它,但这非常有效。值得注意的是,在R中可能有一种比手动创建哈希表进行查找更好的方法。有意义的R函数可以动态创建哈希查找表。如果您正确地将操作矢量化(而不是在循环中调用它们,需要反复创建查找表),这将非常有效。
hash
非常简洁。我在看
bit64
,但这太过分了。尽管
hash()
的作用似乎与
new.env(hash=TRUE)几乎相同