使用 write_csv() 将混合有小整数条目(值小于 1000)和“大”整数条目(值 1000 或以上)的数据框写入 csv 文件,会混合科学和非科学条目。如果前 1000 行是小值,但此后有一个大值,则 read_csv() 似乎会与这种混合混淆并输出科学记数法的 NA:
test_write_read <- function(small_value,
n_fills,
position,
large_value) {
tib <- tibble(a = rep(small_value, n_fills))
tib$a[position] <- large_value
write_csv(tib, "tib.csv")
tib <- read_csv("tib.csv")
}
以下几行不会产生任何问题:
tib <- test_write_read(small_value = 1,
n_fills = 1001,
position = 1000, #position <= 1000
large_value = 1000)
tib <- test_write_read(1, 1001, 1001, 999)
tib <- test_write_read(1000, 1001, 1000, 1)
但是,以下几行可以:
tib <- test_write_read(small_value = 1,
n_fills = 1001,
position = 1001, #position > 1000
large_value = 1000)
tib <- test_write_read(1, 1002, 1001, 1000)
tib <- test_write_read(999, 1001, 1001, 1000)
典型输出:
problems(tib)
## A tibble: 1 x 5
# row col expected actual file
# <int> <chr> <chr> <chr> <chr>
#1 1001 a no trailing characters e3 'tib.csv'
tib %>% tail(n = 3)
## A tibble: 3 x 1
# a
# <int>
#1 999
#2 999
#3 NA
csv 文件:
$ tail -n3 tib.csv
#999
#999
#1e3
我在跑步:
R version 3.4.3 (2017-11-30)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 16.04.3 LTS
使用 tidyverse_1.2.1(加载 readr_1.1.1)
这是一个应该报告的错误吗?