2017-03-08 3 views
1

Ich benutze Rhansontable Paket, ich möchte eine Tabelle erstellen, wo, wenn ich Wert in einer Spalte ändern dann automatisch berechnet eine andere Spalte. Zum Beispiel:R Shiny App: Reaktive/Berechne Spalte in Rhandsontable

DF = data.frame(num = 1:10, price = 1:10,stringsAsFactors = FALSE)

In oben Datenrahmen eine weitere Spalte "Total" (num * Preis) automatisch berechnen, wenn i den Wert in der Spalte "num" ändern

Kann bitte mit Probe glänzend Code helfen?

Antwort

1

Ich denke, das ist, was Sie wollen

#rm(list = ls()) 
library(shiny) 
library(rhandsontable) 

## Create the dataset 
DF = data.frame(num = 1:10, price = 1:10,Total = 1:10,stringsAsFactors = FALSE) 
numberofrows <- nrow(DF) 

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

    # Initiate your table 
    previous <- reactive({DF}) 

    MyChanges <- reactive({ 
    if(is.null(input$hotable1)){return(previous())} 
    else if(!identical(previous(),input$hotable1)){ 
     # hot.to.df function will convert your updated table into the dataframe 
     mytable <- as.data.frame(hot_to_r(input$hotable1)) 
     # here the second column is a function of the first and it will be multipled by 100 given the values in the first column 
     mytable <- mytable[1:numberofrows,] 

     # Add some test cases 
     mytable[,1][is.na(mytable[,1])] <- 1 
     mytable[,2][is.na(mytable[,2])] <- 1 
     mytable[,3] <- mytable[,1]*mytable[,2] 
     mytable 
    } 
    }) 
    output$hotable1 <- renderRHandsontable({rhandsontable(MyChanges())}) 
}) 

ui <- basicPage(mainPanel(rHandsontableOutput("hotable1"))) 
shinyApp(ui, server) 

enter image description here