R:何时使用stringAsFactors

3
我一直在研究stringAsFactors,尽管默认值为TRUE,在许多情况下你必须将其设置为FALSE才能使用某些命令。据我所知:
- 因子是R存储文本的默认方式,因此如果您有一个包含文本的df列,则导入数据时R将始终将其转换为因子(?)。 - 如果您打算使用特定的文本列进行统计测试(回归等),那么这很好,因为许多统计函数(如lm()或glm())都需要将文本变量设置为因子,以便将其视为分类数据。 - 然而,如果您想要做其他事情而不是统计测试(即操作您的df、合并它等),那么您可能想将stringAsFactors设置为FALSE,因为如果您将文本变量设置为因子,一些函数可能会给您带来错误。
这正确吗?我认为我理解了stringAsFactors的主要概念,但我想知道是否有任何“规则”可以遵循?换句话说,当您开始一个新脚本时,通常不会完全确定是否应将stringAsFactors设置为TRUE还是FALSE?是否有已知特别需要将stringAsFactors设置为FALSE的(非统计)包的列表?
换句话说,如果您相当确定不会在数据上使用统计函数,将stringAsFactors设置为FALSE是否被认为是“良好的实践”?
我知道我的问题有点模糊,但我只是想知道是否有人使用某种“技巧”/“规则”来“决定”是否将参数设置为TRUE或FALSE。谢谢

1
默认设置仅为向后兼容而存在。否则,它早在许多年前就已更改。我的建议是:在每个脚本的顶部放置 options(stringsAsFactors = FALSE) 并在需要时显式创建因子。 - Roland
1个回答

2
你的讨论内容看起来非常准确,但是你漏掉了一个重要点。创建因子的一个原因是它们可以在可变量所需的存储空间方面实现潜在的大规模减少。例如,考虑数据框的一列,它的基数(唯一值)非常低。当将这些信息存储为字符数据时,需要存储每个字符串所需的任何存储空间,跨越整个列。然而,使用因子,存储要求大幅降低。作为因子,R只需要存储实际字符串值一次,并可以使用数字级别表示所有值。对于基数较低的列而言,只需要存储少量字符串,相对于列的大尺寸而言。

鉴于R主要是一种内存工具,而且内存非常珍贵,因子代表优化任何R脚本的良好机会。从存储/内存的角度来看,将"stringsAsFactors"设置为"TRUE"是明智的选择。显然,如果你有API或需要需要其他设置,则需要做出决策。


1
注意:在早期版本的R中,如果有一小部分重复数据,则将字符数据存储为因子会更节省空间。然而,现在相同的字符字符串共享存储空间,因此在大多数情况下差异很小。(整数值存储在4个字节中,而对字符字符串的每个引用都需要一个4或8字节的指针。) - Roland
@Roland 你是在说因子现在更有帮助,还是在早期的R版本中更有帮助? - Tim Biegeleisen
文档表明现在你不需要再考虑内存问题了(除极端应用程序之外可能需要注意)。 - Roland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接