如何使用户能够从数据集中选择一行,并将该数据行发送到后端,以便使用R shiny进行处理

时间:2017-03-27 15:19:04

标签: r shiny

是否可以在闪亮中向用户显示数据集(表格)(前端)并从该数据集中选择要在后端处理的“单个”行。

情形:

我正在使用UCI数据集“https://archive.ics.uci.edu/ml/datasets/Human+Activity+Recognition+Using+Smartphones”在R中使用传感器数据应用开发简单的人类活动(坐,跑,走等)识别 。我将使用数据集训练某个分类模型说天真的贝叶斯,然后从该数据集中我想给我训练的模型一行该数据集并找到(识别)该行所属的活动类别。每行包含特定实例的传感器的各种属性的值。

我将开发它作为用户交互式应用程序“因此使用闪亮”并希望我的整个数据集在前端(csv表单)以及一些选项(比如复选框)可见以选择单行并提供我的在后端建模要处理的行。

我知道这可能看起来不是非常互动的应用程序,但我想“从前端控制”哪一行被处理,以便我可以预测该特定传感器数据的活动。是否可能以某种方式?

注意:从数据集(在前端可见)我的意思是只有包含560个属性的csv文件,我没有兴趣识别人(即1-30)我只想要活动。

1 个答案:

答案 0 :(得分:0)

是的,这绝对是可能的。正如@ s.brunel所提到的那样,DT包非常容易。

下面是一个玩具示例,我们在其中运行通过模型单击的行。

library("shiny")
library("dplyr")
library("DT")
library("rpart")

set.seed(1)

# set an id variable
iris <- iris %>% mutate(id = row_number())

# select a training set
train_iris <- iris %>%
  group_by(Species) %>%
  sample_frac(0.75)

# select the testing rows
test_iris  <- anti_join(iris, train_iris, by = 'id')

# build the model
fit <- rpart(Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width, data = test_iris)

ui <- fluidPage(
  DT::dataTableOutput('unscored'),
  DT::dataTableOutput('scored')
  )

server <- function(input, output) {

  # display the data that is available to be scored
  output$unscored <- DT::renderDataTable(test_iris)

  scored_data <- reactive({
    # make sure there are rows to score
    shiny::validate(
      need(length(input$unscored_rows_selected) > 0, "Select rows to score!")
    )

    score_dat <- test_iris[input$unscored_rows_selected, ]
    # return the data with the prediction
    data.table(
      score_dat,
      predicted = predict(fit, score_dat, type = "class")
    )
  })

  # display the scored data once processed by the model
  output$scored <- DT::renderDataTable(scored_data())
}

shinyApp(ui, server)

enter image description here