【发布时间】:2017-09-11 11:51:29
【问题描述】:
从其他编程语言中,我熟悉字符串数据类型。除了这种数据类型,R 还具有因子数据类型。我是 R 语言的新手,所以我想了解一下这种新数据类型背后的意图。
问题: R 中“因子”和“字符串”数据类型之间的实际区别是什么?
我知道(在概念/哲学层面上)因子数据类型应该对分类随机变量的值进行编码,但我不明白(在实际层面上)为什么字符串数据类型不足以这个目的。
看似具有相同实际用途的重复数据类型将是bad design。然而,如果 R 在这样一个基本层面上的设计真的很糟糕,那么它就不太可能达到它所拥有的受欢迎程度。所以要么发生了非常不可能的事件,要么我误解了因子数据类型的实际意义/目的。
尝试:我能想到的一件事是“因子级别”的概念,其中可以为因子分配排序(不能对字符串执行此操作),这很有帮助在描述“有序分类变量”时,即具有顺序的分类变量(例如“低”、“中”、“高”)。
(尽管即使这样似乎也不会使因子严格成为必要。由于排序总是线性的,即在可数集上没有真正的偏序,我们总是可以用从整数的某个子集映射到有问题的字符串 - 但是在实践中,一遍又一遍地实现可能会很痛苦,而且天真的实现可能不如内置的因子和因子级别的实现那么有效R.)
但是,并非所有分类变量都是有序的,有些是“名义的”(即没有顺序)。然而,“因子”和“因子水平”似乎仍然与这些“名义分类变量”一起使用。为什么是这样? IE。对这些变量使用因子而不是字符串有什么实际好处?
我能找到的关于这个主题的唯一其他信息是以下引用 here:
此外,将字符串变量存储为因子变量可以更有效地使用内存。
这是什么原因?这仅适用于“有序分类变量”,还是适用于“名义分类变量”?
相关但不同的问题:这些问题似乎相关,但并没有具体解决我的问题的核心——即因子和字符串之间的差异,以及为什么有这样的差异是有用的(从编程的角度来看,而不是统计角度)。
Difference between ordered and unordered factor variables in R
Factors ordered vs. levels
Is there an advantage to ordering a categorical variable?
factor() command in R is for categorical variables with hierarchy level only?
【问题讨论】:
标签: r