1

我最近从 R 3.5.1 更新到 R 4.0.0。的行为read.csv似乎已经改变 - 当我在 R 4.0.0 中加载 .csv 文件时,不会自动检测到因素,而是将其识别为字符。我还在我的机器上运行 3.5.1,当使用相同的代码在 3.5.1 中加载相同的文件时,因子被识别为因子。这有点不理想。

有什么建议么?

R3.5.1截图 R4.0.0截图

我正在运行 Windows 10 Pro 并在 Excel 2013 中创建 .csv 文件。

4

2 回答 2

2

正如 Ronak Shah 在对您的问题的评论中所说,R 4.0.0 更改了默认行为read.table()(以及它的包装器,包括read.csv())如何处理字符向量。关于这个问题一直存在长期争论,但基本上stringsAsFactors == T设置是自 R 诞生以来的默认设置,因为它有助于节省内存,因为 R 中实现了因子变量(本质上它们是一个整数向量,添加了因子级别信息最佳)。现在没有理由这样做了,因为内存要丰富得多,而且这个选项经常会产生意想不到的副作用。

您可以在Hadley Wickham 的 Advanced R 的第 3 章中阅读有关您的特定问题以及 R 中向量的其他特性的更多信息。在那里,他给出了两篇文章,非常详细地说明了为什么默认行为是这样的。 是一个,是另一个。如果你已经对 R 有一些经验,我还建议你看看 Hadley 的书,它对我学习该语言的一些不太明显的特性很有帮助。

于 2020-05-22T09:30:49.960 回答
1

正如这里的每个人所说 - R 4.0.0 中的默认行为已经改变,字符串不再自动转换为因子。这会影响各种功能,包括read.csv()data.frame()。然而,一些明确地与因子一起工作的函数不受影响。这些包括expand.grid()as.data.frame.table()

绕过此更改的一种方法是设置全局选项:

options(stringsAsFactors = TRUE)

但这也将被弃用,最终您将不得不手动将字符串转换为因子。

这种决定的主要原因似乎是可重复性。字符串到因子的自动转换会产生因子级别,这些级别可能取决于系统使用的语言环境。因此,如果您来自俄罗斯并与您在日本的朋友分享带有自动转换因子的脚本,他最终可能会得到不同的因子水平顺序。

您可以在Kurt Hornik的“The R Blog” stringAsFactors帖子中阅读更多相关信息

于 2020-05-22T10:08:50.960 回答