выполнение операций после загрузки файла CSV в блестящем [R]

Я сделал кнопку загрузки, с помощью которой я загружаю файл .CSV [набор данных] в блестящем цвете.

dataframe <- data.frame(A=c(2,3,4,5,6,7,3,7,8,9,2),B=c(3,7,8,9,2,1,2,3,4,5,6),C=c(1,1,1,2,2,1,1,1,1,2,2))

In ui.R :

fileInput('datafile', 'Choose CSV file',
     accept=c('csv', 'comma-separated-values','.csv')),
     actionButton("uploaddata", "upload"),

Я хочу выполнить такие операции, как «a + b» и «a-b» над набором данных, и добавить его в качестве нового столбца в свой набор данных с помощью actionButton.

Проблема 1: я попытался использовать функцию tableOutput () для отображения ДАННЫХ в shinyapp, но вместо этого он отображает фрейм данных ДАННЫЕ в консоли R.

В server.R:

DATA <- dataframe %>% group_by(C) %>% mutate(A) %>% 
mutate(B) %>% mutate(add = (A+B)) %>% mutate(sub = (A-B))

Проблема 2: я хочу использовать ДАННЫЕ в качестве входных данных для создания ggplots (add, sub)


person ayush    schedule 23.07.2015    source источник
comment
Без ваших ui.r и server.r трудно сказать, что происходит с проблемой 1. Что не так с проблемой 2?   -  person John Paul    schedule 23.07.2015
comment
@JohnPaul Для проблемы 1: у меня есть два столбца a и b, для которых я вычисляю a+b и a-b. Теперь, когда я пытаюсь отобразить всю таблицу в shinyapp, а она не отображается ... Я не знаю, где я делаю не так. По проблеме 2: я действительно не знаю, как это сделать!   -  person ayush    schedule 23.07.2015


Ответы (1)


Вы можете сделать что-то вроде этого:

ui.R

library(shiny)

shinyUI(fluidPage(
        fileInput('datafile', 'Choose CSV file',
                accept=c('csv', 'comma-separated-values','.csv')),
        tableOutput('table'),
        plotOutput('plot')
        ))

server.R

library(shiny)
library(ggplot2)

shinyServer(function(input, output,session) {

        dataframe<-reactive({
                if (is.null(input$datafile))
                        return(NULL)                
                data<-read.csv(input$datafile$datapath)
                data<- data %>% group_by(C) %>% mutate(A) %>% 
                        mutate(B) %>% mutate(add = (A+B)) %>% mutate(sub = (A-B))
                data
        })
        output$table <- renderTable({
                dataframe()
        })
        output$plot <- renderPlot({
                if(!is.null(dataframe()))
                        ggplot(dataframe(),aes(x=X,y=add))+geom_point()
        })
})

Я удалил кнопку действия, потому что fileInput загрузит файл сразу после того, как пользователь выберет его. В server.R загруженный dataframe хранится в реактивном значении, вы можете вызвать dataframe(), когда хотите построить график / визуализировать таблицу, чтобы получить фрейм данных.

Вы также можете захотеть код, чтобы проверить, что ваш CSV-файл содержит столбцы A и B и т. Д.

person NicE    schedule 23.07.2015
comment
Спасибо @NicE. Я попробовал ваш код. Но во второй проблеме я получаю ошибку Aesthetics must either be length 1 or the same length as the data problems: A, B .. Как ее решить? - person ayush; 24.07.2015
comment
вот что я пробовал: ggplot(data.frame(),aes=(y=A,x=B,colour=C))+geom_point для этого он возвращает Aesthetics ошибку - person ayush; 24.07.2015
comment
У меня отлично работает, после aes нет равных, попробуйте удалить. - person NicE; 24.07.2015
comment
моя проблема, я ошибся при написании комментария. нет =, который я использовал в своей команде в R - person ayush; 24.07.2015
comment
Кроме того, это ваш код data.frame() или dataframe(), переменная dataframe() без точек, возможно, следует изменить это, чтобы сделать его менее запутанным. - person NicE; 24.07.2015
comment
@ Ник, прости. опечатка. это dataframe () - person ayush; 24.07.2015
comment
Каждый раз, когда вызывается функция dataframe (), csv загружается с диска, верно? Это означает, что данные читаются несколько раз. Разве в R-shiny нет более простого способа сделать переменные доступными для всей функции сервера? - person UweM.; 20.11.2017