создать графический интерфейс для загрузки всех файлов в папке, выполнить базовый анализ и экспортировать результаты - PullRequest
1 голос
/ 07 октября 2019

Я пытаюсь создать графический интерфейс (впервые, так что это очень непростой вопрос) для выполнения ряда простых задач:

  1. чтение всех файлов csv в папке
  2. применить фильтр нижних частот (например)
  3. экспортировать результаты в CSV-файл, содержащий исходные данные и отфильтрованные

Я сделал кодирование для всехпроцесс в R, но у меня возникли проблемы с переводом его в графический интерфейс. Я пытаюсь gWindget2 и после "Программирование графических интерфейсов пользователя в R" смог прочитать файлы, но я не совсем понимаю, как использовать ввод интерфейса для анализа, а затем экспортировать.

Этокод R для анализа:

    library(dplyr) 
    library(tools) 
    library(tidyr) 
    library(signal)

    datafiles <- list.files("FilesData", pattern="*.csv", full.names=TRUE) 
    df = tibble(File = datafiles) %>% 
      mutate(Data = lapply(File, read.csv), Name=file_path_sans_ext(basename(File))) %>% 
      unnest(Data) %>%
      select(-File)

    df$date <- as.POSIXct(df$date) 

    order <- 1
    sensitivity <- 0.2
    bf <- butter(order,sensitivity) 

    for(var in unique(df$Name)){
      dfvar <- subset(df, df$Name==var)
      dfvar$LPmin <- filtfilt(bf,(dfvar$min))
      dfvar$LPmax <- filtfilt(bf,(dfvar$max))

      if(exists("df2")){
        df2 <- rbind.data.frame(df2, dfvar) 
      }  

      if(!exists("df2")){
        df2 <- data.frame(dfvar) 
      }
      rm(var, dfvar)
    }


    for(var in unique(df2$Name)){
      dfvar <- subset(df2, df2$Name==var)
      write.csv(dfvar, paste("./Result/",var,"Filtered.csv",sep=""), row.names = FALSE)

      rm(dfvar, var)
    }

Код GUI (что я пробовал до сих пор ...)

    require(gWidgets2)
    options(guiToolkit="RGtk2")


    window <- gwindow("File search",visible=FALSE)
    paned <- gpanedgroup(cont=window)

    group <- ggroup(cont=paned,horizontal=FALSE)
    glabel("Search for (filename):",cont=group,anchor=c(1,0))
    txt_pattern <- gedit("",initial.msg="*.csv",cont=group)

    glabel("Search in:",cont=group,anchor=c(1 , 0 ))
    start_dir <- gfilebrowse(text="Select a directory ...",quote=FALSE,type="selectdir",cont=group)


    search_button <- gbutton("Search",cont=group,handler=function(h, ...){
      pattern <- glob2rx(svalue(h$action$txt) )
      file_names <- dir(svalue(h$action$dir),
                pattern,recursive=TRUE)
      if(length(file_names))
        svalue(h$action$results)<- file_names
      else
        galert("No matching files found",parent=w)},
      action=list(txt=txt_pattern,dir=start_dir,results=search_results)
    )
    addSpring(group)

    frame <- gframe("Output:",cont=paned,horizontal=FALSE)
    search_results <- gtext("",cont=frame,expand=TRUE)
    size(search_results)<- c(350 , 200)

    addHandlerChanged(search_button,handler=function(h, ...){   
      pattern <- glob2rx(svalue(txt_pattern))
      file_names <- dir(svalue(start_dir),pattern,recursive=TRUE)
      if(length(file_names))
        svalue(search_results)<- file_names
      else
        galert("No matching files found",parent=window)
      })

    visible(window)<- TRUE

С кодом выше я могу загружать файлыиз папки (поиск файлов «* .csv») на панели «Вывод», но я не знаю, как использовать этот ввод для анализа с помощью кода R. Выше.

Извините, есливопрос простой, но я буду признателен за любую помощь!

1 Ответ

0 голосов
/ 09 октября 2019

Кажется, вы хотите, чтобы пользователь выбрал каталог, а затем все остальное определяется программно. Простой графический интерфейс может выглядеть так:


w <- gwindow()
g <- ggroup(horizontal=FALSE, cont=w)
fb <- gfilebrowse(quote=FALSE,type="selectdir", cont=g)
output <- gtext(cont=g, expand=TRUE)

addHandlerChanged(fb, handler=function(h, ...) {
 d = svalue(h$obj)
 file_names = dir(d, recursive=TRUE)
 print(file_names)
 print(".... do more with file_names ...")
 svalue(output) <- paste(file_names, sep="\n", collapse=" ")
})
...