gpt4 book ai didi

r - 为什么 write.csv 和 read.csv 不一致?

转载 作者:行者123 更新时间:2023-12-04 02:26:37 25 4
gpt4 key购买 nike

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center为指导。




8年前关闭。




问题很简单,考虑下面的例子:

m <- head(iris)
write.csv(m, file = 'm.csv')
m1 <- read.csv('m.csv')

这样做的结果是 m1与原始对象不同 m因为它有一个名为“X”的新第一列。如果我真的想让它们相等,我必须使用额外的参数,就像在这两个例子中一样:
write.csv(m, file = 'm.csv', row.names = FALSE)
# and then
m1 <- read.csv('m.csv')

或者
write.csv(m, file = 'm.csv')
m1 <- read.csv('m.csv', row.names = 1)

问题是,造成这种差异的原因是什么?特别是,为什么如果 write.csvread.csv据说是为了坚持 Excel 约定,不要导入最初导出的同一个对象?对我来说,这是一种非常反直觉的行为,非常不受欢迎。

(如果我使用这些函数的 csv2 变体,则结果完全相同)

提前致谢!

这些是 data.frames mm1如果您不想使用 R 来查看示例:
> m
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa

> m1
X Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 1 5.1 3.5 1.4 0.2 setosa
2 2 4.9 3.0 1.4 0.2 setosa
3 3 4.7 3.2 1.3 0.2 setosa
4 4 4.6 3.1 1.5 0.2 setosa
5 5 5.0 3.6 1.4 0.2 setosa
6 6 5.4 3.9 1.7 0.4 setosa

最佳答案

这是我的猜测...
write.table将 data.frame 写入文件并且 data.frames 始终具有行名称,因此默认情况下不写入行名称会丢弃信息。 (是的,write.table 也会写一个矩阵,矩阵不必有行名,但 data.frames 可能比矩阵更频繁地使用。)
read.table返回一个 data.frame 但 CSV 文件没有任何行名称的概念,因此有人可能会争辩说,默认情况下假设 CSV 的第一列是行名称是违反直觉的。

现在可能有一种方法可以使这两个函数保持一致,但我认为写入文本文件并不是将数据从一个 R session 输出/输入到另一个的最佳方式。使用更安全/更快 save , load , saveRDS , readRDS , 等等。

关于r - 为什么 write.csv 和 read.csv 不一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12512062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com