r - 允许用户修改数据的 Shiny R 应用程序

标签 r shiny shiny-server

这还不是一个实际问题,而是一个理论问题。我正在考虑使用 Shiny 以交互方式显示一些原始数据。这可以。

但是 - 是否可以让用户更改显示的数据?

假设我有一堆 slider 供用户限制基础数据以满足某些条件并显示这些观察结果 - 是否可以允许用户对该数据进行修改并将这些修改发送回服务器,这反过来保存这些更改?

我正在考虑用户可能使用 Shiny Application 浏览数据并检测数据中潜在异常值的场景——然后用户可以将这些标记为异常值。但是,该信息需要传回服务器。

这样的应用可能吗?有一些现有的例子吗?

最佳答案

我一直在研究使用此工作流程的软件包:

  • 用户将数据加载到 R session 中并从命令行
  • 完成一些初始筛选
  • 数据被传递给 Shiny 应用程序,允许用户以交互方式选择和修改数据
  • 用户单击按钮结束 Shiny session ,修改后的数据将返回到 R session ,用户所做的所有更改都完好无损。

  • 这不是使用 Shiny 的常用方式 - 该应用程序不是远程部署的,而是在本地用作单个用户的交互式绘图界面。我用基本图形和 locator() 做了类似的事情。功能,很繁琐。使用 tcl/tk 可能更容易,但我很想知道它如何与 Shiny 一起工作。

    这是一个玩具示例:
    myShiny <- function(mydata){
    
      ui <- fluidPage(
        actionButton("exit", label = "Return to R"),
        plotOutput("dataPlot", click = "pointPicker")
      )
    
      server <- function(input, output){
        output$dataPlot <- renderPlot({
          plot(x = myData()[, 1], y = myData()[,2], cex = myData()[,3])
        })
    
        myData <- reactive({
          selPts <- nearPoints(mydata,
                               input$pointPicker, "x", "y",
                               threshold = 25, maxpoints = 1, allRows = TRUE)
          if(sum(selPts[,"selected_"]) > 0){
          ## use '<<-' to modify mydata in the parent environment, not the 
          ## local copy
            mydata[which(selPts[, "selected_", ]), "size"] <<-
              mydata[which(selPts[, "selected_", ]), "size"] + 1
          }
          mydata
        })
    
        observe({
          if(input$exit > 0)
            stopApp()
        })
    
      }
      runApp(shinyApp(ui = ui, server = server))
      return(mydata)
    }
    
    testDF <- data.frame(x = seq(0, 2 * pi, length = 13),
                         y = sin(seq(0, 2 * pi, length = 13)),
                         size = rep(1, 13))
    
    modDF <- myShiny(testDF)
    

    shiny-app

    在这种情况下,单击一个点会增加相应行中的一列(“大小”)的值(在绘制时使用 cex 参数可视化)。这些值返回给用户,在这种情况下,存储在 modDF 中。多变的:
    > modDF
               x             y size
    1  0.0000000  0.000000e+00    1
    2  0.5235988  5.000000e-01    5
    3  1.0471976  8.660254e-01    1
    4  1.5707963  1.000000e+00    1
    5  2.0943951  8.660254e-01    2
    6  2.6179939  5.000000e-01    1
    7  3.1415927  1.224647e-16    1
    8  3.6651914 -5.000000e-01    7
    9  4.1887902 -8.660254e-01    1
    10 4.7123890 -1.000000e+00    1
    11 5.2359878 -8.660254e-01    3
    12 5.7595865 -5.000000e-01    1
    13 6.2831853 -2.449294e-16    1
    

    很容易修改它以切换“异常值”列中的值(以便您可以扭转您的决定),或者直接在数据框中进行永久性更改。

    在我的实际包中,我使用这种方法允许用户直观地选择非线性回归的初始参数,立即看到在浏览器中绘制的结果模型拟合,重复直到他们得到一个看起来合理的拟合模型,最后保存结果并返回到他们的 R session 。

    关于r - 允许用户修改数据的 Shiny R 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17263627/

    相关文章:

    r - 如何解决 R Markdown (Knit) "'closure' is not subsettable"?

    r - 循环函数以构建列表

    css - R Shiny 更改 dateRangeInput 小部件的大小和格式

    r - Shiny :下载 zip 存档

    css - 如何微调在 r Shiny 中渲染的对象的位置?

    r - 创建 Shiny 的 react 变量,指示最后修改哪个小部件

    r - Shiny 的服务器。打印 JSON 作为结果输出

    r - 如何将图例向上移动到更靠近 ggplot2 中的 x 轴标签

    r - 使用 Purrr 包生成具有正确 xlab 的绘图

    r - 使用 Shiny 时,包 rcpp 不适用于(R 版本 2.15.2)