R shiny - 编辑数据框并闪亮采用最后编辑的数字
R shiny - editing a data frame and shiny takes the last number edited
我有一个动态 UI 和 select 输入,以便 select 数据框的行和列,以及一个用于引入新数字的数字输入。当我更改一个数字并选择另一行后,shiny 会使用上次使用的数字更改新行的数字。
server.R
shinyServer(function(input, output) {
output$select1 = renderUI(
selectInput("contrato","Selecciona un codi", c(variables[,1],"Select"), "Select") )
output$select2 = renderUI(
if (is.null(input$contrato) || input$contrato == "Select"){
return()
}else{
selectInput("variable", "Selecciona una variable", c(colnames(variables)[-1], "Select"), "Select")
})
output$select3 = renderUI(
if (is.null(input$variable) || input$variable == "Select" ){
return()
}else{
num <- variables[which(input$contrato == variables$garantias), which(input$variable == colnames(variables))]
numericInput("var", "Modificar:", num)
})
result <- reactive({
if(is.null(input$variable) || is.null(input$contrato) ) {
return()
} else {
variables[which(input$contrato == variables$garantias), which(input$variable == colnames(variables))] <<- as.numeric(input$var)
return(variables)
}
})
output$View = renderTable({
if(is.null(input$contrato) || is.null(input$variable) ) {
return()
} else {
result()
}
})
})
ui.R
shinyUI(fluidPage(
titlePanel("Test"),
sidebarLayout(
sidebarPanel(
uiOutput("select1"),
uiOutput("select2"),
uiOutput("select3")
),
mainPanel(h3("Data frame: "),
tableOutput("View"))
)
))
和数据框:
variables <- data.frame(garantias = c("C00", "C11", "C22", "C33"), c.retencio = rep(2,4), t.mort = rep(3,4), comi = rep(4,4), desp = rep(5,4), PB = rep(6,4))
非常感谢!
问题是该应用程序不知道您何时需要更改。例如,如果您想将同一列的两行更改为“4”,您要做的就是更改行号。但是 shiny 无法判断这是您在更改行号时想要执行的操作,还是您也打算更改列号。
处理此问题的一种方法是在 ui
中放置一个 actionButton
,然后仅在按下按钮时更改值。因此,在 ui
中的 sidebarPanel
中的第 3 个 uiOutput
下方添加:
actionButton(inputId=modificar, label="Modifica")
并在 server
中更改:
result <- reactive({
input$modificar
isolate({
if(is.null(input$variable) || is.null(input$contrato) ) {
return()
} else {
variables[which(input$contrato == variables$garantias),
which(input$variable == colnames(variables))] <<-
as.numeric(input$var)
return(variables)
}
})
})
这应该隔离对 variables
的更改,以便仅当用户点击按钮时才会发生这些更改。
我有一个动态 UI 和 select 输入,以便 select 数据框的行和列,以及一个用于引入新数字的数字输入。当我更改一个数字并选择另一行后,shiny 会使用上次使用的数字更改新行的数字。
server.R
shinyServer(function(input, output) {
output$select1 = renderUI(
selectInput("contrato","Selecciona un codi", c(variables[,1],"Select"), "Select") )
output$select2 = renderUI(
if (is.null(input$contrato) || input$contrato == "Select"){
return()
}else{
selectInput("variable", "Selecciona una variable", c(colnames(variables)[-1], "Select"), "Select")
})
output$select3 = renderUI(
if (is.null(input$variable) || input$variable == "Select" ){
return()
}else{
num <- variables[which(input$contrato == variables$garantias), which(input$variable == colnames(variables))]
numericInput("var", "Modificar:", num)
})
result <- reactive({
if(is.null(input$variable) || is.null(input$contrato) ) {
return()
} else {
variables[which(input$contrato == variables$garantias), which(input$variable == colnames(variables))] <<- as.numeric(input$var)
return(variables)
}
})
output$View = renderTable({
if(is.null(input$contrato) || is.null(input$variable) ) {
return()
} else {
result()
}
})
})
ui.R
shinyUI(fluidPage(
titlePanel("Test"),
sidebarLayout(
sidebarPanel(
uiOutput("select1"),
uiOutput("select2"),
uiOutput("select3")
),
mainPanel(h3("Data frame: "),
tableOutput("View"))
)
))
和数据框:
variables <- data.frame(garantias = c("C00", "C11", "C22", "C33"), c.retencio = rep(2,4), t.mort = rep(3,4), comi = rep(4,4), desp = rep(5,4), PB = rep(6,4))
非常感谢!
问题是该应用程序不知道您何时需要更改。例如,如果您想将同一列的两行更改为“4”,您要做的就是更改行号。但是 shiny 无法判断这是您在更改行号时想要执行的操作,还是您也打算更改列号。
处理此问题的一种方法是在 ui
中放置一个 actionButton
,然后仅在按下按钮时更改值。因此,在 ui
中的 sidebarPanel
中的第 3 个 uiOutput
下方添加:
actionButton(inputId=modificar, label="Modifica")
并在 server
中更改:
result <- reactive({
input$modificar
isolate({
if(is.null(input$variable) || is.null(input$contrato) ) {
return()
} else {
variables[which(input$contrato == variables$garantias),
which(input$variable == colnames(variables))] <<-
as.numeric(input$var)
return(variables)
}
})
})
这应该隔离对 variables
的更改,以便仅当用户点击按钮时才会发生这些更改。