我正在尝试创建一个具有流放表的闪亮应用程序。如果要选择/检查另一列中的相应值,我希望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)
因此,如果我检查“选择”列,则“差异”列应在c1和c2列之间产生差异
答案 0 :(得分:0)
据我了解,您的目标是根据其他某些列的值进行一些计算。因此,例如,如果选中了第三列的框,则可能要计算第一列和第二列的元素之差。
如果只有一个数据框,那很容易,不是吗?嗯,这可以使用电抗值来实现。主要思想是,您可以将rhandsontable存储在后端的数据帧中,修改数据帧,然后再次将修改后的数据帧呈现回handontable中。
我希望这会有所帮助:
有关电抗值的更详细示例,请参见 这个: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)