Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中带因子的索引向量_R - Fatal编程技术网

R中带因子的索引向量

R中带因子的索引向量,r,R,我有一个因子RFyhat,我想把它转换成一个数值向量。我已经发现了 as.numeric(levels(RFyhat))[RFyhat] 按照预期工作,我对这种结构做了一些尝试: c(1,2,20,4,5,6,7)[RFyhat] 也可以按预期工作(RFyhat有7个级别) 所以我理解这个结构的行为,但我想知道是否有人能解释这个语法是如何工作的,或者它是否只是“语法糖”。更具体地说,[RFyhat]是否充当索引向量?如果是这样的话,当用作索引时,因子通常是如何工作的?是的,我相信在用于索引时

我有一个因子RFyhat,我想把它转换成一个数值向量。我已经发现了

as.numeric(levels(RFyhat))[RFyhat]
按照预期工作,我对这种结构做了一些尝试:

c(1,2,20,4,5,6,7)[RFyhat]
也可以按预期工作(
RFyhat
有7个级别)


所以我理解这个结构的行为,但我想知道是否有人能解释这个语法是如何工作的,或者它是否只是“语法糖”。更具体地说,
[RFyhat]
是否充当索引向量?如果是这样的话,当用作索引时,因子通常是如何工作的?

是的,我相信在用于索引时,因子会转换为整数,而不是字符或其他任何东西

看看这个例子

> fac <- factor(letters[c(1,1,2,1,3,3,2,1)])
> vec <- c(b=1, a=2, c=3)
> vec[fac]
b b a b c c a b 
1 1 2 1 3 3 2 1 
>fac-vec-vec[fac]
b b a b c c a b
1 1 2 1 3 3 2 1 
因此,
fac
的元素1返回了
vec
的元素1,而不考虑名称的不同顺序


就个人而言,我更喜欢
as.integer(as.character(RFyhat))
而不是
as.numeric(levels(RFyhat))[…]
as.integer(as.character(RFyhat))
确实有我想要的行为,但我更想了解
as.numeric(levels(RFyhat))[RFyhat]是如何做的。所以RFyhat的每个元素都被转换成一个整数,就好像它是“未级别的”一样?以
c(1,20,3,4)[c(2,2,2,2,2,2,2,2)]
为例,它返回一个20s的数值向量,这是有意义的。为什么
as.numeric(levels(RFyhat))[RFyhat]
返回一个数值向量而不是一个因子?这只是R的一个特点吗?是否将因子转换为一个数值向量,如
c(2,2,2,2,2,2,2)
?@Justin我想你缺少的是一个因子是一个整数向量(以及级别)。但它实际上存储为整数代码,只有唯一的级别作为“查找”值。节省空间。是的,就是这样。你得到了一个数值向量,因为你用一个因子来子集一个数值向量,这个因子被转换成一个整数向量。哦…这很有意义。谢谢你的帮助!