为什么当我附加到向量时,我的字符会变换?

Why do my characters transform when I append to a vector?

提问人:User 提问时间:7/27/2023 最后编辑:divibisanUser 更新时间:7/27/2023 访问量:24

问:

我现在正在学习 R,并意识到当我附加到一个因子时,它就变成了一个字符。即使我没有指定因子水平,也会发生这种情况。当我查看数字的顺序时,我发现它们对应于“因子水平”,例如,小是 1。但是,我想知道为什么在使用这种附加到向量的方法时会发生这种情况。

size_order <- factor(c("small", "medium", "large", "medium", "small", "small"), levels = c("small", "medium", "large"))

size order
> [1] small  medium large  medium small  small 
> Levels: small medium large huge

typeof(size_order)
> integer

但是当我附加到它时,它变成了一个字符:

size_order <- append(size_order, "small")

size order
> "1"     "2"     "3"     "2"     "1"     "1"     "small"

typeof(size_order)
> [1] "character"
R 因子

评论

1赞 Allan Cameron 7/27/2023
你需要。c(size_order, factor("small"))

答:

2赞 Onyambu 7/27/2023 #1

文档指出:?c

将值组合到向量或列表中 描述 这是一个组合了其参数的泛型函数。

默认方法组合其参数以形成一个向量。所有参数都被强制转换为一个公共类型,该类型是返回值的类型,并且除名称之外的所有属性都将被删除。

请注意,所有属性都被剥离了。你正在连接一个因素和一个角色。因子在内部存储为整数。这将被强制到一个角色上,以便将两者结合起来。

若要获得所需的结果,请考虑在连接之前强制第二个字符串进行因式分解。即

size_order <- factor(c("small", "medium", "large", "medium", "small", "small"), levels = c("small", "medium", "large"))
size_order <- c(size_order, factor('small'))

这与以下相同:

append(size_order, factor('small'))
[1] small  medium large  medium small  small  small 
Levels: small medium large