Quantcast
Channel: Active questions tagged r - Stack Overflow
Viewing all articles
Browse latest Browse all 206278

Use reactive data inside eventReactive

$
0
0

I am very new to Shiny and struggle to understand reactivity.

Context : I want user to choose a name for a column, add this column to a reactive table and then edit this table. The table is reactive (it comes from an uploaded file filtered by user).

Thanks to this answer everything work fine with a non-reactive table (see mydata <- mtcars[1:5,]). But it doesn't work when mydata becomes reactive!

Here is a reproductible working example with NON-REACTIVE data from @dww answer:

library(rhandsontable)

ui <- fluidPage(
  h2("The mtcars data"),
  rHandsontableOutput("mytable"),
  textInput('NewCol', 'Enter new column name'),
  radioButtons("type", "Column type:",
    c("Integer" = "integer",
      "Floating point" = "numeric",
      "Text" = "character")),
  actionButton("goButton", "Update Table")
)

server <- function(input, output) {
  mydata <- mtcars[1:5,]
  output$mytable = renderRHandsontable(df())
  df <- eventReactive(input$goButton, {
    if(input$NewCol!=""&& !is.null(input$NewCol) && input$goButton>0){
      if (input$type == "integer") v1 <- integer(NROW(mydata))
      if (input$type == "numeric") v1 <- numeric(NROW(mydata))
      if (input$type == "character") v1 <- character(NROW(mydata))
      newcol <- data.frame(v1)
      names(newcol) <- input$NewCol
      mydata <<- cbind(mydata, newcol)
    }
    rhandsontable(mydata, stretchH = "all")
  }, ignoreNULL = FALSE)
  observe(if (!is.null(input$mytable)) mydata <<- hot_to_r(input$mytable))
}

shinyApp(ui,server)

I have unsuccessfully tried these changes inside the code (basically I have changed all mydata for mydata()):

server <- function(input, output) {

# mydata <- reactive({ }) #make mydata a reactive object

output$mytable = renderRHandsontable(df())
df <- eventReactive(input$goButton, {
    if(input$NewCol!=""&& !is.null(input$NewCol) && input$goButton>0){
        if (input$type == "integer") v1 <- integer(NROW(mydata()))
        if (input$type == "numeric") v1 <- numeric(NROW(mydata()))
        if (input$type == "character") v1 <- character(NROW(mydata()))
        newcol <- data.frame(v1)
        names(newcol) <- input$NewCol
        mydata <<- cbind(mydata(), newcol)
    }
    rhandsontable(mydata(), stretchH = "all")
}, ignoreNULL = FALSE)
observe(if (!is.null(input$mytable)) mydata() <<- hot_to_r(input$mytable))}

I did not find this question answers/comments useful to answer my problem).

Could you explain how to use a reactive mydata inside @dww awesome answer?


Viewing all articles
Browse latest Browse all 206278

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>