2017-03-08 73 views
1

我正在使用Rhansontable包,我想创建一个表,如果我在一列中更改值,然后另一列自动计算。例如:R Shiny App:Reactive/Calculate column in Rhandsontable

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

在上述数据帧时,我改变列“NUM”

值的另一列“总”(NUM *价格)应该会自动计算可以请与样品闪亮代码帮助?

回答

1

我想这是你想要的

#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