gpt4 book ai didi

r - 删除 r shiny 中的特定行

转载 作者:行者123 更新时间:2023-12-04 19:58:29 25 4
gpt4 key购买 nike

我目前正在编写一个 Shiny 的应用程序,用户可以在其中向数据框添加和删除行。

为此,我首先使用以下方法在 shinyServer 函数中初始化数据框:

values <- reactiveValues()
values$df <- data.frame(v1 = NA,
v2 = NA,
v3 = NA,
v4 = NA,
v5 = NA,
v6 = NA,
v7 = NA,
v8 = NA
)

接下来,我有一个按钮和相应的代码来向 reactiveValue 添加行:

newEntry <- observe({
if(input$add.button > 0) {

new.value <- isolate(input$v1 * input$v2 * input$v3 * input$v4)

newRow <- isolate(c(input$v1, input$v2, input$v3, input$v4,
input$v5, input$v6, input$v7, new.value))

isolate(values$df <- rbind(values$df, newRow))
}

})

到目前为止,这段代码非常适合我。最后,我想允许用户从数据框中删除最后一行或特定行。为此,我有一个删除按钮 (input$delete.button) 和一个用于选择行的 numericInput()。我想实现的逻辑应该是:如果没有选择特定行,则删除最后一行,否则删除所选行。我试过的代码是:

deleteEntry <- observe({
if(input$delete.button > 0) {


if(is.na(input$row.selection)){

values$df <- isolate(values$df[-nrow(values$df), ])

} else {

what does here?

}
}

})

所以第一个语句,删除最后一行有效,但删除特定行总是失败。我尝试了不同的尝试,包括 eventReactive() 但到目前为止没有任何效果。

编辑:这是我的 ui.r 的相关部分:

# Add button
actionButton(inputId = "add.button", label = "Add", icon = icon("plus")),

# Delete button
actionButton(inputId = "delete.button", label = "Delete", icon = icon("minus")),

# Row selection
numericInput(inputId = "row.selection", label = "Select row to be deleted", min = 1, max = 100, value = ""),

有什么想法可以实现这个逻辑吗?最好,费边

最佳答案

只需使用

删除特定元素

values$df <- isolate(values$df[-input$row.selection, ])

使用您代码的某些部分,我创建了这个简单的工作示例来展示如何删除特定行。

runApp(list(
ui = shinyUI(
fluidPage(
sidebarLayout(
sidebarPanel(
# Add button
actionButton(inputId = "add.button", label = "Add", icon = icon("plus")),
# Delete button
actionButton(inputId = "delete.button", label = "Delete", icon = icon("minus")),
# Row selection
numericInput(inputId = "row.selection", label = "Select row to be deleted", min = 1, max = 100, value = "")
),
mainPanel(
verbatimTextOutput('text')
)
)
)
),

server = function(input, output, session) {
values <- reactiveValues()
values$df <- data.frame(v1 = NA,
v2 = NA,
v3 = NA,
v4 = NA,
v5 = NA,
v6 = NA,
v7 = NA,
v8 = NA
)

newEntry <- observe({
cat("newEntry\n")
if(input$add.button > 0) {
new.value <- isolate(input$v1 * input$v2 * input$v3 * input$v4)
newRow <- isolate(c(input$v1, input$v2, input$v3, input$v4,
input$v5, input$v6, input$v7, new.value))
isolate(values$df <- rbind(values$df,sample(1:8)))
}
})

deleteEntry <- observe({
cat("deleteEntry\n")
if(input$delete.button > 0) {
if(is.na(isolate(input$row.selection))){
values$df <- isolate(values$df[-nrow(values$df), ])
} else {
values$df <- isolate(values$df[-input$row.selection, ])
}
}

})

output$text = renderPrint({
values$df

})

}
)

如果这不是您想要的,请修改代码并编辑您的问题。

作为对 future 问题的建议,请始终尝试提供一个可显示问题或所需功能的最小工作示例。它会始终简化对问题的理解,并提供一种简单的方法来测试解决方案是否按预期工作。

问候

关于r - 删除 r shiny 中的特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31133860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com