Тип данных изменяется при экспорте фрейма данных в csv в r - PullRequest
1 голос
/ 03 августа 2020

Я пишу тестовый скрипт, чтобы проверить, читаются ли данные. Данные читаются как фрейм данных. Я пишу этот список в csv, чтобы прочитать его снова как файл csv. Но после записи в файл csv типы данных изменились. Как решить эту проблему?

test_that(desc = "Test for 'ReadData' Condition 1",
          code = {
            identifier = "Test"
            wdPath = file.path(getwd(),"Data/xyz", identifier)
            Actual_Output = ReadData(wdPath)
            Expected_Output = read.csv("./UnitTest/Data/Expected_baseData.csv",
                                       header = TRUE)
            expect_equal(Actual_Output, Expected_Output)
          })

ReadData - это функция для чтения данных, которая возвращает фрейм данных. Теперь, когда я экспортирую его в csvband, прочитайте его, все типы данных будут изменены. Функция ReadData выглядит следующим образом:

ReadData = function(wdPath) {
  
  Data = fread(file = list.files(file.path(wdPath, "Olt"), full.names = TRUE) %>% 
                     as.data.frame(.) %>% 
                     filter(stri_detect(str = ., fixed = ".csv")) %>% 
                     unlist(.) %>% 
                     as.character(.),
                   data.table = FALSE,
                   stringsAsFactors = FALSE,
                   encoding = "UTF-8",
                   colClasses = "character") %>% 
    mutate(a = as.numeric(a),
           dc = as.numeric(dc),
           SN = as.numeric(SN))
  
  return(Data)
}

Это ошибка

Error: `Actual_Output` not equal to `Expected_Output`.
Component “b”: Modes: character, numeric
Component “b”: target is character, current is numeric
Component “x”: Modes: character, numeric
Component “x”: Attributes: < target is NULL, current is list >
Component “x”: target is character, current is factor
Component “a”: Modes: character, numeric
Component “a”: Attributes: < target is NULL, current is list >
Component “a”: target is character, current is factor
Component “a”: Modes: character, numeric

Это ошибка, которую я получаю; когда я проверяю типы данных, обнаруживается несоответствие типов данных между ожидаемым выводом и фактическим выводом.

Входные данные выглядят следующим образом:

dput(Data)
structure(list(b = c("143", "123"), x = c("2018/03", "2018/07"), No = c("105", "106"), 
    j = c("1", "2"), a = c(120, 164), SN = c(1, 1)), row.names = 1:2, class = "data.frame")
...