Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.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:何时使用stringAsFactors_R_Character - Fatal编程技术网

R:何时使用stringAsFactors

R:何时使用stringAsFactors,r,character,R,Character,我一直在阅读关于stringAsFactors的内容,以及尽管默认值为TRUE,但在许多情况下,对于某些命令,您必须将其设置为FALSE。据我所知: 因子是R存储文本的默认方式,因此,如果df的列包含文本,R将(始终?)在导入数据时将其转换为因子 如果您打算使用这个特定的文本列进行统计测试(回归等),那么这很好,因为许多统计函数(如lm()或glm())将要求您将文本变量设置为因子,以便它可以将它们视为分类数据 但是,如果您打算执行统计测试以外的操作(即操纵df、合并df等),则可能需要将st

我一直在阅读关于stringAsFactors的内容,以及尽管默认值为TRUE,但在许多情况下,对于某些命令,您必须将其设置为FALSE。据我所知:

  • 因子是R存储文本的默认方式,因此,如果df的列包含文本,R将(始终?)在导入数据时将其转换为因子

  • 如果您打算使用这个特定的文本列进行统计测试(回归等),那么这很好,因为许多统计函数(如lm()或glm())将要求您将文本变量设置为因子,以便它可以将它们视为分类数据

  • 但是,如果您打算执行统计测试以外的操作(即操纵df、合并df等),则可能需要将stringAsFactors设置为FALSE,因为如果将文本变量设置为factors,某些函数可能会出错

这是正确的吗?我想我理解stringAsFactors的主要概念,但我想知道人们是否使用了任何“规则”?换句话说,当您启动一个新脚本时,不完全确定是否应该将stringAsFactors设置为TRUE或FALSE是“正常”的?是否有一个(非统计)软件包列表,这些软件包特别希望stringAsFactors设置为FALSE

换句话说,如果有人相当确定您不会对数据使用统计函数,那么将stringAsFactors设置为FALSE是否被视为“良好做法”


我知道我的问题很模糊,但我只是想知道,在“决定”是否将参数设置为TRUE或FALSE时,人们是否会使用某种“技巧”/“规则”。谢谢

您在讨论中遗漏了一个要点,在我看来,这些要点完全准确无误。创建因子的一个原因是,它们可能会大幅减少变量所需的存储空间量。考虑,例如,具有非常低基数的数据帧的列(值的唯一性)。当将此信息存储为
字符
数据时,需要任何存储来存储整个列中的每个字符串。然而,由于各种因素,存储需求大大减少。作为一个因素,R只需要存储一次实际字符串值,然后就可以使用数字级别表示所有值。而且,对于基数较低的列,与较大的列相比,实际上只需要存储少数字符串


考虑到R主要是一个内存中的工具,内存是宝贵的,这些因素代表了优化任何R脚本的好机会。纯粹从存储/内存的角度来说,将
stringsAsFactors
设置为
TRUE
是有意义的。显然,如果您有API或其他需要,则需要做出决定。

默认值仅在向后兼容的情况下保持不变。否则它在很多年前就已经改变了。我的建议是:将
选项(stringsAsFactors=FALSE)
放在每个脚本的顶部,并在需要时显式创建因子。注意:在R的早期版本中,如果重复的比例很小,则将字符数据存储为一个因子会更节省空间。但是,相同的字符串现在共享存储,因此在大多数情况下差异很小。(整数值存储在4字节,而每一个字符串的引用需要一个4或8字节的指针)。“从<代码>帮助(“因子”)< /代码>。@罗兰,你是说这些因素现在帮助了更多,还是他们在R的早期版本中帮助了更多?文档是说现在你不需要再考虑内存了。(某些极端应用可能例外)。