【问题标题】:Numeric values change when written to txt file [duplicate]写入txt文件时数值发生变化[重复]
【发布时间】:2019-02-13 09:18:24
【问题描述】:

我正在尝试从this file 中提取第一列。它是一个应被视为字符串的 16 个数字的序列。问题是当我将数据写入文本文件时,某些值似乎已经改变。以下是我正在使用的代码。

dataMaster = read.table("Master.txt", header = F, colClasses = rep("character",67))

write.table(dataMaster$V1, "sequence.txt", col.names = F, row.names = F, 
            quote = F, sep = "\n")

下面是一个例子。我正在使用相同的两行 261182、261183。同样的错误发生了很多次。好像当我写文件时,数字 9 被数字 0 替换。

主文件是在 Mac 环境中处理的,我在 Windows 环境中工作。

【问题讨论】:

  • 那么mastersequence的第一个变量应该是一样的吧?
  • 我基本上是从主文件中提取第一列并将其写入 sequence.txt
  • 链接副本中接受的答案也弄错了,哈哈。
  • @HongOoi,尽管有 14 票赞成!现在我确实感到委屈...xD 在 2012 年的宁静日子里生活更轻松...

标签: r file


【解决方案1】:

如果您想将sequence 变为character,另一种方法是指定您的colClasses

library(dplyr)

dataMaster %>% 
  select(1) %>% 
  write.table("sequence.txt", col.names = F, row.names = F, 
              quote = F, sep = "\n")

sequence <- read.table("sequence.txt", colClasses = "character")

dataMaster[c(261182, 261183), 1]
#[1] "9171513174761179" "9171513174771179"

sequence[c(261182, 261183), ]
#[1] "9171513174761179" "9171513174771179"

【讨论】:

  • 这应该是公认的答案
  • @HongOoi 我已经更改了接受的答案。很抱歉造成混乱。看来我也不明白其中的区别。谢谢你的解释。
【解决方案2】:

如果要操作字符串,请看下面patL的回答。以下是我将数字序列视为数字的答案。


您可能需要增加options 下的scipen 值:

options(scipen=999)

当您输出 numbers to any format 时,这会增加超过默认 15 位的精度位数。

在输入方面,如果您指定character 只是为了避免丢失,请注意您应该改为将read.tablenumerals 参数更改为"no.loss",因为默认(第一个选项)会导致丢失没有警告。我已经从下面的帮助页面?read.table 复制了相关文本。

read.table(..., numerals = c("allow.loss", "warn.loss", "no.loss"))
        string indicating how to convert numbers whose conversion to
        double precision would lose accuracy, see type.convert. Can be
        abbreviated. (Applies also to complex-number inputs.)

【讨论】:

  • @FonsMA 我已经尝试过使用 options(scipen=999) 并且它有效。谢谢。
  • 这是一个糟糕的答案。如果数据是字符,那么应该按照字符来读写,而不是摆弄有效数字。
  • 我已更正,我多次错过“应该被视为字符串”...我无法删除“正确”的答案,所以我进行了编辑以反映您的观点并指出patL 的回答如下
  • 不用担心。能够接受批评的道具;很多人会飞离手柄....
  • @FonsMA 只是为了清楚以后的参考资料,我会将 patL 的答案标记为正确答案。
猜你喜欢
  • 2023-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-21
  • 2020-07-11
  • 1970-01-01
  • 2016-04-14
  • 1970-01-01
相关资源
最近更新 更多