приемлемо: попытка обновить таблицу и временные ряды в интерактивном - PullRequest
0 голосов
/ 13 января 2020

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

Например, если я ввел значения в первой таблице, в первом столбце с именем «ENE», строка ниже в столбце с именем «ENE» является суммой этих значений и изменяется каждый раз, когда я изменяю значения в первой таблице.

Я пробовал много разных вещей, но я не смог заставить приложение сделать это так, как я хотел

observeEvent(
        input$table3$changes$changes,
        {
            xi=input$table3$changes$changes[[1]][[1]] 
            datavalues$data <- hot_to_r(input$table3)                
            datavalues$data[xi+1,3] = datavalues$data[xi+1,1] + datavalues$data[xi+1,2] 
        }
    )

Еще одна вещь, которую я пытаюсь сделать, это заставить приложение создавать время ряды, основанные на значениях второй таблицы ниже

Вот пример того, что я пытаюсь сделать

Col1<-c("","","","Región","","","","Usuarios Especiales","")
Col2<-c("Guyana","Capital","Centro Occidente","Ocidente","Sur Occidente","Oriente",
        "Insular","Hidrocapital e Hidrocentro, Minera Loma de Niquel","")
Col3<-c(replicate(8,0),0)
Col3.1<-Col3
Col3.2<-Col3
Col3.3<-Col3
Col3.4<-Col3
Col3.5<-Col3
Col3.6<-Col3
Col3.7<-Col3
Col3.8<-Col3
Col3.9<-Col3
Col3.10<-Col3
Col3.11<-Col3

Tabla_Suma=data.frame("Usuarios"=Col1," "=Col2,"ENE"=Col3,"FEB"=Col3.1,"MAR"=Col3.2,"ABR"=Col3.3,"MAY"=Col3.4,"JUN"=Col3.5,"JUL"=Col3.6,"AGO"=Col3.7,"SEP"=Col3.8,"OCT"=Col3.9,"NOV"=Col3.10,"DIC"=Col3.11)

Suma=data.frame("ENE"=sum(Col3),"FEB"=sum(Col3.1),"MAR"=sum(Col3.2),"ABR"=sum(Col3.3),"MAY"=sum(Col3.4),"JUN"=sum(Col3.5),"JUL"=sum(Col3.6),"AGO"=sum(Col3.7),"SEP"=sum(Col3.8),"OCT"=sum(Col3.9),"NOV"=sum(Col3.10),"DIC"=sum(Col3.11))


library(shiny)
library(rhandsontable)
library(plotly)

# Define UI for application that draws a histogram
ui <- fluidPage(

    # Application title
    titlePanel("Plot Time Series"),

    # Sidebar with a slider input for number of bins 
    sidebarLayout(
        sidebarPanel(
            helpText("Plot time series with input values on table")
        ),

        # Show a plot of the generated distribution
        mainPanel(
            rHandsontableOutput("table2"),
            h3("Max power Demand (MW)a/"),
            rHandsontableOutput("table3"),
            br(),br(),
            plotlyOutput("plot_four")
        )
    )
)

server <- function(input, output,session) {

    datavalues <- reactiveValues(data=Suma)

    output$table2 <-renderRHandsontable({
        if(is.null( Tabla_Suma )){return()}
        rhandsontable( Tabla_Suma , showToolbar=TRUE , search=TRUE , rowDrag = TRUE,
                       columnDrag = TRUE, rowResize = TRUE, minDimension = c(100, 100))
    })


    datavalues <- reactiveValues(data=Suma)

    output$table3 <-renderRHandsontable({
        if(is.null( datavalues$data )){return()}
        rhandsontable( datavalues$data , showToolbar=TRUE , search=TRUE , rowDrag = TRUE,
                       columnDrag = TRUE, rowResize = TRUE, minDimension = c(100, 100))
    })

    observeEvent(
        input$table3$changes$changes, # observe if any changes to the cells of the rhandontable
        {

            xi=input$table3$changes$changes[[1]][[1]] 
            datavalues$data <- hot_to_r(input$table3) 

            datavalues$data[xi+1,3] = datavalues$data[xi+1,1] + datavalues$data[xi+1,2] # 

        }
    )

    output$plot_four <-renderPlotly({

        today <- Sys.Date()
        tm <- seq(0, 350, by = 5)
        x <- today + tm
        y <- rnorm(length(x))
        plot_ly(x = ~x, y = ~y, mode = 'lines', text = paste(tm, "days from today"))%>%
            layout(title = "Time series",
                   xaxis = list(title = "Months"),
                   yaxis = list (title = "MW"))

    })
}

shinyApp(ui = ui, server = server)

Заранее спасибо за вашу помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...