Fah*_*bar 2 r shiny rhandsontable
我正在尝试创建一个闪亮的应用程序,其中有一个rhandsontable。如果选择/检查另一列中的相应值,我希望 rhandsontable 能够更新其其中一列中的值。到目前为止,我已经能够使用反应/观察事件来更改两个对象之间的输出值,但我无法理解它,即,如何使 rhandsontable 的一列对同一个表中的另一列做出反应?
这是我正在尝试构建的一个简单示例:
library(shiny)
library(rhandsontable)
ui <- fluidPage(
rHandsontableOutput('table')
)
server <- function(input,output,session)({
data <- data.frame(c1=c(5,10,15), c2=c(3,6,9) , diff=c(0,0,0), select= as.logical( c(FALSE,FALSE,FALSE)))
output$table <- renderRHandsontable({
rhandsontable(data)
})
})
shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)
因此,如果我检查“Select”列,“diff”列应该产生列 c1 和 c2 之间的差异
小智 6
据我了解,您的目标是根据其他列的值进行一些计算。因此,例如,如果选中第三列的框,您可能需要计算第 1 列和第 2 列的元素之间的差异。
如果您只有一个数据框,那会很容易,不是吗?嗯,这可以使用无功值来实现。主要思想是,您可以将rhandsontable存储在后端的数据框中,修改数据框,然后将修改后的数据框再次渲染回handsontable中。
我希望这有帮助:
有关反应值的更详细示例,您可以查看:http://stla.github.io/stlapblog/posts/shiny_editTable.html 和:https ://www.youtube.com/watch?v=BzE1JmC0F6Q&list=PL6wLL_RojB5wXR3NR3K38sIvexZ_45alY&index =3
library(rhandsontable)
library(shiny)
ui <- fluidPage(
mainPanel(
rHandsontableOutput("hot")
)
)
server = function(input, output, session){
df<- data.frame(c1=c(5,10,15), c2=c(3,6,9) , diff=c(0,0,0), select= as.logical( c(FALSE,FALSE,FALSE)))
values <- reactiveValues(data = df)
observe({
if(!is.null(input$hot)){
values$data <- as.data.frame(hot_to_r(input$hot))
isolate(values$data[,'diff'] <- ifelse(values$data[,'select'], values$data[,'c1']-values$data[,'c2'] ,0))
print(values$data)
output$hot <- renderRHandsontable({
rhandsontable(values$data)
})
}
})
output$hot <- renderRHandsontable({
rhandsontable(values$data)
})
}
shinyApp(ui, server)
Run Code Online (Sandbox Code Playgroud)