我有一個簡單的練習:x
是data.frame的一列dt
。我想製作一個Shiny應用程序,打印出x
的平均值。如果複選框「乘以2」被選中,則將x
乘以2.如果不是那麼舊的值。避免全局更改變量
library(shiny)
dt <- data.frame(x = 1:10, y = rep(c(2,3),5))
ui <- fluidPage(
checkboxInput("myCheckbox", "multiple dt$x by 2"),
actionButton("myButton", "show result")
)
server <- function(input, output) {
i <- 0
observeEvent(input$myCheckbox,{ # if this checkbox is true then dt$x should be muiltiplied by 2
i <<- i + 1
if(i > 1){ # first call should not change dt$x
if(input$myCheckbox){
dt$x <<- dt$x * 2
}else{
dt$x <<- dt$x/2
}
}
})
observeEvent(input$myButton,{
showNotification(paste0("Mean of dt$x is equal ", mean(dt$x)), type="default")
})
}
shinyApp(ui, server)
我該如何避免那些<<-
?這是有風險的,在我的更大的Shiny應用程序中有300行代碼,我有時會得到一個錯誤,說R無法選擇範圍。
您是否希望多次乘以'dt $ x'?或者只是在將它乘以2並返回其原始值之間切換? –
切換。正如我們在代碼中看到的那樣。 –