读取csv文件后输出正确 - fread()vs read.csv.raw(iotools package)

时间:2016-03-11 13:03:27

标签: r csv data.table fread

我正在测试'read.csv.raw'和'fread' - 'fread'似乎不正确地读取数据。我需要一些指导,为什么会发生这种情况。到目前为止,我还没有找到关于这个问题的明确答案。

我的脚本如下:

library(iotools)
library(data.table)

#make a dataframe
df_size<-100
n<-data.frame(x=1:df_size,y=rnorm(1:df_size),z=rnorm(1:df_size),w=c("fgdfgd"))
n[,4]<-as.character(n[,4])

file_output<-"test.csv"
check<-n
#to save the dataframe to the csv file 
if (file.exists(file_output)) file.remove(file_output)
cat(noquote(paste(paste(names(check),collapse = ";"),"\n")),file = file_output)
system.time(write.csv.raw(check,file_output,sep=";",append=TRUE))

#reading1
system.time(check<-read.csv.raw(file_output,header=TRUE,sep=";"))
str(check)

#reading2
system.time(check<-fread(file_output,sep=";", data.table = FALSE
                          ,stringsAsFactors = FALSE,header=TRUE
                          ,dec=".")
            )
str(check) 

reading1是好的,但是read2的输出是奇怪的(不是数据帧,而是一种列表)。 我不知道为什么会发生

源文件的格式和数据结构似乎没问题(通过Notepad ++检查)。

2016年3月12日更新:

看起来'fread'和'read.csv.raw'使用不同的文件格式来生成正确的输出。它导致:

  1. 'fread'处理'write.csv'或'write.table'生成的文件(格式示例如下)。这可能会导致关于正确读取输入数据的两个函数的无法比较:
  2.   

    “x”;“y”;“z”;“w”\ r \ n
      1; 2,19881034888372; -0,76140845752573;“fgdfgd”\ r \ n   2; 1,31241297643351; -1,10813097991471;“fgdfgd”\ r \ n   3; -0,265145056696353; 0,167098566457511;“fgdfgd”\ r \ n   4; 0,54319405923209; 1,43792266965061;“fgdfgd”\ r \ n

    1. 'read.csv.raw'处理'write.csv.raw'生成的文件(格式示例如下):
    2.   

      x; y; z; w \ r \ n
        1; 2.19881034888372; -0.76140845752573; fgdfgd \ n   2; 1.31241297643351; -1.10813097991471; fgdfgd \ n   3; -0.265145056696353; 0.167098566457511; fgdfgd \ n   4; 0.54319405923209; 1.43792266965061; fgdfgd \ n   5; -0.41433994791886; 0.62409900226019; fgdfgd \ n   6; -0.476246894615578; 0.781638996872154; fgdfgd \ n

0 个答案:

没有答案