也是没想到一个普通的人畜无害的csv导出功能会这么难用,还挂在tidyverse下面。
具体症状是含中文字符串列,且字符串长度上万时会随机出现串行错字,表现如下:
ref列为实际数据,csv为输出csv后乱码的数据
> xdiff
ref csv
1 洛菲不动杆菌 疑似致病菌\x8f\x8c
2 细粒棘球绦虫 吡咯素伯克霍尔德菌
3 韦德纤毛菌 呼吸道微生态
4 生信模拟阳性对照 疑似致病菌
5 头葡萄球菌 善变副球菌
6 溶血葡萄球菌 疑似致病菌
7 非发酵棒状杆菌 疑似致病菌
8 神户肠杆菌 疑似背景菌
9 流感嗜血杆菌 疑感嗌景菌
10 蒂莫内马赛菌 疑似臅马赛菌
11 甜瓜鞘氨醇单胞菌 绳状蓝状菌
12 解糖葡萄球菌 疑似致病菌
13 解糖普雷沃菌 厌氧消化链球菌
14 真口普雷沃菌 疑似致病菌
15 懒惰约翰森菌 懒惰纴桑纤毛菌
16 特雷维桑纤毛菌 懒惰纴桑纤毛菌
17 酸杆菌* 厌氧球菌*
18 约氏不动杆菌 疑似背景菌
19 克罗彭施泰特棒状杆菌 颗粒丙酸杆菌
20 产酸丙酸杆菌 疑似致病菌\x8f\x8c
一个可重复例子
##下载数据: https://thunderbird.visionmedicals.cn/tmp_storage/testdata.rda
load("testdata.rda")
readr::write_excel_csv(testdata,file = "~/testx2.csv")
testdata_csv= data.table::fread("~/testx2.csv")
xdiff = data.frame(
ref = testdata$species_chinese[which(testdata_csv$species_chinese != testdata$species_chinese)],
csv = testdata_csv$species_chinese[which(testdata_csv$species_chinese != testdata$species_chinese)]
)
xdiff
目前我的解决办法是替换为data.table::fwrite()
R version 4.3.2 (2023-10-31)
Platform: x86_64-conda-linux-gnu (64-bit)
Running under: Ubuntu 20.04.5 LTS
Matrix products: default
BLAS/LAPACK: /home/tchzhang/miniconda3/envs/renv423/lib/libopenblasp-r0.3.21.so; LAPACK version 3.9.0
locale:
[1] LC_CTYPE=C.UTF-8 LC_NUMERIC=C
[3] LC_TIME=zh_CN.UTF-8 LC_COLLATE=C.UTF-8
[5] LC_MONETARY=zh_CN.UTF-8 LC_MESSAGES=C.UTF-8
[7] LC_PAPER=zh_CN.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=zh_CN.UTF-8 LC_IDENTIFICATION=C
time zone: Asia/Shanghai
tzcode source: system (glibc)
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] compiler_4.3.2