read.csv在R 4.0.0中似乎无法检测到因子。

问题描述 投票:1回答:2

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

有什么建议吗?

Screenshot of R3.5.1Screenshot of R4.0.0

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

r categorical-data read.csv r-4.0.0
2个回答
1
投票

正如Ronak Shah在对你的探索的评论中所说的,R 4.0.0改变了默认行为,在如何 read.table() (所以其包装物包括 read.csv())对待字符向量。关于这个问题已经争论了很久,但基本上就是 stringsAsFactors == T设置是R的默认值,因为在R中,因子变量的实现方式有助于节省内存(本质上它们是一个整数向量,上面添加了因子级别的信息)。现在这样做的理由已经不多,因为内存更丰富了,而且这个选项经常产生意想不到的副作用。

你可以阅读更多关于你的特殊问题,以及R中向量的其他特点,请参见 第三章 的《高级R》,作者是Hadley Wickham。在那里,他给出了两篇文章,详细介绍了为什么默认行为是这样的。这里是 是一个和 此处 是另一个。如果你已经有了一些R的经验,我还建议你看看Hadley的书,它对我学习一些不太明显的语言特性帮助很大。


1
投票

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

你可以通过设置一个全局选项来绕过这个变化。

options(stringsAsFactors = TRUE)

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

这样决定的主要原因似乎是为了可重复性。字符串到因子的自动转换会产生因子水平,而这些水平可能取决于系统使用的地区。因此,如果你来自俄罗斯,并与你在日本的朋友分享你的自动转换因子的脚本,他可能最终会得到不同的因子水平顺序。

你可以在 "R博客 "上读到更多的信息。stringsAsFactors 岗位 Kurt Hornik

© www.soinside.com 2019 - 2024. All rights reserved.