R/wczytajDane.R

Defines functions wczytajDane

Documented in wczytajDane

#' @title wczytuje dane z pliku rozpoznając typ pliku
#' @description
#' Wczytuje dane ze wskazanego pliku automatycznie dostosowując sposób ich 
#' wczytania do typu pliku (obecnie obsługiwane CSV, XLSX i RData).
#' 
#' W wypadku plików RData zwracane są wszystkie ramki danych zawarte w pliku.
#' Jeśli jest ich wiele, zwracana jest ich lista, jeśli tylko jedna, zwracana
#' jest wprost jako ramka danych.
#' @param plik ścieżka do pliku danych
#' @param kodowanie kodowanie kodowanie polskich znaków stosowane w plikach opisu grup i
#'   danych (istotne tylko w wypadku plików CSV)
#' @param separator separator plików CSV (istotny tylko w wypadku plików CSV)
#' @return wczytane dane
#' @export
wczytajDane = function(plik, kodowanie = 'Windows-1250', separator = ';'){
  stopifnot(
    file.exists(plik),
    grepl('[.](csv|xlsx|rdata)$', tolower(plik))
  )
  
  plikL = tolower(plik)
  if(grepl('csv$', plikL)){
    dane = wczytajCSV(plik, fileEncoding = kodowanie, sep = separator)
  }else if(grepl('xlsx$', plikL)){
    dane = openxlsx::readWorkbook(plik)
  }else if(grepl('rdata$', plikL)){
    srodowisko = new.env()
    load(plik, srodowisko, FALSE)
    dane = list()
    for(i in ls(, envir = srodowisko)){
      tmp = get(i, envir = srodowisko)
      if(is.data.frame(tmp)){
        dane[[i]] = tmp
      }
    }
    if(length(dane) == 0){
      dane = data.frame()
    }else if(length(dane) == 1){
      dane = dane[[1]]
    }
  }
  
  return(dane)
}
zozlak/MLAK documentation built on July 16, 2020, 10 p.m.